[英]Eloquent update and get record back
當我通常更新記錄時,我會
$myObject->update(['field' => 'value']);
這會同時更新數據庫和我的實例 $myObject。 但是,有時,我需要進行批量更新,所以我使用 model 門面並做
$result = MyObject::where(...)->update(['field' => 'value');
這里的問題是 $result 給我發回了 boolean 而不是更新的實例,所以我通常需要單獨做的是在我需要做相同的過濾器之后,但這次是 get()。
$objects = MyObject::where(...)->get();
有沒有一種更有效的方法來更新和獲取一次調用/請求數據庫中的記錄?
這將解決問題
$product = Product::where('id','76887')->first();
$result = $product->update(['field' => 'value');
$theUpdatedData = $product->refresh();
return $theUpdatedData //This return the updated record
恕我直言,你的方式可以說是 Eloquent 最有效的方式。
如果您比使用 Eloquent 更關心性能,那么使用 PostgreSQL(帶有RETURNING
子句)或 SQL Server(帶有OUTPUT
子句)中的原始查詢,您可以一次性返回更新的記錄。
不幸的是,MySQL 在語句級別上沒有這樣的支持。
在 Laravel 數據庫支持的所有數據庫中,您也可以使用存儲過程來實現這一點(一次數據庫訪問)。
如果您想要最有效的方法,您可以使用單個更新命令更新數據庫,然后使用foreach
循環foreach
內存中的 $objects 並設置每個$object->field = 'value'
。 它不是特別優雅,但就速度而言,這將是最有效的方法,因為這樣您就不需要從數據庫中重新獲取模型。
$result = MyObject::where(...)->update(['field' => 'value');
foreach ($objects as $object) {
$object->field = 'value';
}
您可以像這樣存檔它。
$object = Model::find(1);
$object->field_name_to_update = 'new_value';
$object->another_field_name_to_update = 'new_value2';
$object->save();
echo $object->field_name_to_update; # has updated value
echo $object->another_field_name_to_update; # has updated value
確保 model 中的字段在
$fillable
fillable 中,以避免批量分配錯誤
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.