[英]Laravel 4: how to update multiple fields in an Eloquent model?
如何更新Eloquent模型中的多個字段? 讓我們說我得到這樣的:
$user = User::where("username", "=", "rok");
然后我有所有這些模型參數:
$new_user_data = array("email" => "rok@rok.com", "is_superuser" => 1, ...);
我不能這樣做:
$user->update($new_user_data);
什么是正確的方法? 我希望不是一個foreach
。
但是,以下情況確實有效。 這是要走的路嗎?
User::where("id", "=", $user->id)->update($new_user_data);
最后一個問題(除了它很笨重)是當從對象上下文中使用它時,更新的字段在$this
變量中不可見。
您正在尋找的方法是fill()
:
$user = User::where ("username","rok"); // note that this shortcut is available if the comparison is =
$new_user_data = array(...);
$user->fill($new_user_data);
$user->save();
實際上,你可以做$user->fill($new_user_data)->save();
但我發現單獨的語句更容易閱讀和調試。
你正在尋找這個:
$user = User::where("username","rok")
->update(
array(
"email" => "rok@rok.com",
"is_superuser" => 1,
// ..
)
);
請參閱: http : //laravel.com/docs/4.2/eloquent#insert-update-delete
我建議使用更短的代碼,例如
$new_user_data=array('a'=>'n','b'=>'m');
$user=User::whereUsername('rok');//camelCase replaces "=" sign
$user->fill($new_user_data)->save();
甚至更短
$new_user_data=array('a'=>'n','b'=>'m');
User::whereUsername('rok')->update($new_user_data);//camelCase replaces "=" sign
我相信最后一個語句更容易調試,看起來更好。
警告:如果您的表包含許多名為'rok'的用戶,則兩個提到的語句將立即更新所有這些寄存器。 您應該始終使用id字段值更新寄存器。
嘗試這個,
// took required data out of the request
$postData = request(
[
'firstName',
'lastName',
'address1',
'address2',
'address3',
'postcode',
'phone',
'imageURL',
]
);
// persisted it to the database
DB::table('users')
->where('id', auth()->user()->id)
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.