2013-02-14 497 views
23

如何更新Eloquent模型中的多個字段?比方說,我有這樣的:Laravel 4:如何更新Eloquent模型中的多個字段?

$user = User::where("username", "=", "rok"); 

然後,我有所有這些模型參數:

$new_user_data = array("email" => "[email protected]", "is_superuser" => 1, ...); 

我不能只是做:

$user->update($new_user_data); 

什麼是正確的方法是什麼?我希望不是foreach

但是,下面的工作。這是要走的路嗎?

User::where("id", "=", $user->id)->update($new_user_data); 

與最後一個問題(除了它是笨重的)是從對象上下文使用時,更新的字段不是在$this變量是可見的。

+0

是的,我認爲更新多個列中,'更新時()'函數僅在直接更新模型時纔有效。否則,你必須使用'fill()'和'save()'。 – Pathros 2016-03-30 18:38:06

回答

55

你正在尋找的方法是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();但我覺得單獨的報表變得更容易閱讀和調試。

+0

這是一個遺憾,他們沒有更新()或保存()與新的數據...但這個工程。另外請務必查看Ardent軟件包(它通過驗證和更新獨特功能使事情變得更加美好)。 – Tom 2014-04-11 19:46:18

+5

有沒有人得到這個錯誤: - 調用未定義的方法Illuminate \ Database \ Query \ Builder :: fill() – Bik 2015-05-27 13:18:29

+0

適用於Laravel 5. Muchas gracias。 – racl101 2015-08-19 23:29:28

3

我建議使用更短的代碼,如

$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字段值更新寄存器。

9

您正在尋找這樣的:

$user = User::where("username","rok") 
       ->update( 
         array( 
          "email" => "[email protected]", 
          "is_superuser" => 1, 
          // .. 
          ) 
         ); 

參見:http://laravel.com/docs/4.2/eloquent#insert-update-delete

+0

儘管這個鏈接可能回答這個問題,但最好在這裏包含答案的重要部分,並提供供參考的鏈接。鏈接的答案可能會失效,如果鏈接頁面發生變化 – abarisone 2015-04-15 09:07:31

+0

@Kumar Ramalingam - 尼斯,謝謝:) – Sambhav 2016-04-13 15:47:41

+0

@Sambhav - 歡迎 – 2016-06-16 09:05:16

0

試試這個,

// 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) 
); 
相關問題