雄辩地更新并获取记录

use*_*986 7 php mysql laravel eloquent laravel-5

当我通常更新记录时,我会这样做

$myObject->update(['field' => 'value']);
Run Code Online (Sandbox Code Playgroud)

这会更新数据库和我的实例 $myObject。但是,有时,我需要进行批量更新,所以我使用模型外观并执行

$result = MyObject::where(...)->update(['field' => 'value');
Run Code Online (Sandbox Code Playgroud)

这里的问题是 $result 向我发送回一个布尔值而不是更新后的实例,因此我通常需要在需要执行相同的过滤器之后单独执行操作,但这次是 get()。

$objects = MyObject::where(...)->get();
Run Code Online (Sandbox Code Playgroud)

是否有一种更有效的方法来更新和获取对数据库的一次调用/请求中的记录?

小智 12

这将解决问题

$product = Product::where('id','76887')->first();

$result = $product->update(['field' => 'value');

$theUpdatedData = $product->refresh(); 

return $theUpdatedData //This return the updated record 
Run Code Online (Sandbox Code Playgroud)


pet*_*erm 3

恕我直言,你的方式可以说是 Eloquent 最有效的方式。

如果您比使用 Eloquent 更关心性能,那么可以使用 PostgreSQL(with 子句RETURNING)或 SQL Server(withOUTPUT子句)中的原始查询,您可以一次性返回更新的记录。

遗憾的是,MySQL 在语句级别上不提供此类支持。

在 Laravel 数据库支持的所有数据库中,您还可以使用存储过程来实现这一点(一次访问数据库)。