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)
恕我直言,你的方式可以说是 Eloquent 最有效的方式。
如果您比使用 Eloquent 更关心性能,那么可以使用 PostgreSQL(with 子句RETURNING)或 SQL Server(withOUTPUT子句)中的原始查询,您可以一次性返回更新的记录。
遗憾的是,MySQL 在语句级别上不提供此类支持。
在 Laravel 数据库支持的所有数据库中,您还可以使用存储过程来实现这一点(一次访问数据库)。
| 归档时间: |
|
| 查看次数: |
9916 次 |
| 最近记录: |