29

如何更新 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变量中不可见。

4

4 回答 4

63

您正在寻找的方法是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();但我发现单独的语句更易于阅读和调试。

于 2013-02-14T20:06:28.580 回答
10

你正在寻找这个:

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

参考: http: //laravel.com/docs/4.2/eloquent#insert-update-delete

于 2015-04-15T08:49:13.317 回答
5

我应该建议使用较短的代码,例如

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

于 2014-05-16T06:33:23.510 回答
-1

试试这个,

// 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)
);
于 2017-06-24T21:23:14.050 回答