簡體   English   中英

Laravel 4:如何更新Eloquent模型中的多個字段?

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

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