Laravel - 2个无问题查询?

时间:2015-11-01 13:10:09

标签: laravel laravel-5 eloquent laravel-5.1

大家好,

<{3>}中的

,这是对表进行更新的方法:

$flight = App\Flight::find(1);
$flight->name = 'New Flight Name';
$flight->save();

我必须说,我真的不明白。对我来说,这意味着对于一个非常基本的更新,将有2个查询到数据库 - 一个选择,那么更新?

任何人都可以解释为什么这会是一个很好的解决方案?

谢谢!

2 个答案:

答案 0 :(得分:1)

任何抽象都用于复杂的应用程序。代码太简单了,你感觉不到它的优点。对象关系映射(ORM)用于隐藏操作数据库的详细信息或运行SQL查询。

就像MVC模型一样,不同的层负责不同的领域。

查看:呈现HTML

控制器:逻辑控制,如if .. else ..

模型:数据访问,如数据修改和持久性。

控制器层不会处理模型层的工作方式,只需找到$flight之类的对象,然后更改其属性,save()即可。这很自然而且很整洁。您的控制器层都是关于对象修改,而不是数据修改。

通过分离数据和对象,您可以轻松地或至少可能更改数据持久性的实现。

如果经常更改某些对象,您可以将其保存在RedisMemcached或其他NoSQL存储空间中。控制器层的代码无需更改。

如果某些对象非常大并且不经常修改,您可以考虑使用某些分布式存储或使用lazy loading技术。您的控制器代码也未更改。您只需更改模型层的实现,上层代码就不会知道更改。

解耦或分层代码,可以轻松更改任何图层的实现。如果您认为两行SQL查询比ORM更快,那么您可能需要体验具有高需求变化和性能优化的大型项目。

将实现与使用分开总是好的。

编辑:

您可以使用whereupdate按ID进行更新。见http://laravel.com/docs/5.1/eloquent#basic-updates

App\Flight::where('active', 1)
          ->where('destination', 'San Diego')
          ->update(['delayed' => 1]);

答案 1 :(得分:1)

如果您希望确保只修改一条有效记录,则可以使用此方法。

另一方面,文档中还有另一种方法:

App\Flight::where('active', 1)
          ->where('destination', 'San Diego')
          ->update(['delayed' => 1]);

您是否需要确保单个记录修改是您的偏好。