簡體   English   中英

Eloquent 更新並取回記錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM