大家好,
<{3>}中的,这是对表进行更新的方法:
$flight = App\Flight::find(1);
$flight->name = 'New Flight Name';
$flight->save();
我必须说,我真的不明白。对我来说,这意味着对于一个非常基本的更新,将有2个查询到数据库 - 一个选择,那么更新?
任何人都可以解释为什么这会是一个很好的解决方案?
谢谢!
答案 0 :(得分:1)
任何抽象都用于复杂的应用程序。代码太简单了,你感觉不到它的优点。对象关系映射(ORM)用于隐藏操作数据库的详细信息或运行SQL查询。
就像MVC模型一样,不同的层负责不同的领域。
查看:呈现HTML
控制器:逻辑控制,如if .. else ..
模型:数据访问,如数据修改和持久性。
控制器层不会处理模型层的工作方式,只需找到$flight
之类的对象,然后更改其属性,save()
即可。这很自然而且很整洁。您的控制器层都是关于对象修改,而不是数据修改。
通过分离数据和对象,您可以轻松地或至少可能更改数据持久性的实现。
如果经常更改某些对象,您可以将其保存在Redis
或Memcached
或其他NoSQL
存储空间中。控制器层的代码无需更改。
如果某些对象非常大并且不经常修改,您可以考虑使用某些分布式存储或使用lazy loading
技术。您的控制器代码也未更改。您只需更改模型层的实现,上层代码就不会知道更改。
解耦或分层代码,可以轻松更改任何图层的实现。如果您认为两行SQL查询比ORM更快,那么您可能需要体验具有高需求变化和性能优化的大型项目。
将实现与使用分开总是好的。
编辑:
您可以使用where
和update
按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]);
您是否需要确保单个记录修改是您的偏好。