【问题标题】:Laravel 4: how to update multiple fields in an Eloquent model?Laravel 4:如何更新 Eloquent 模型中的多个字段?
【发布时间】:2013-01-30 10:44:52
【问题描述】:

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

【问题讨论】:

  • 是的,我认为在更新几列时,update()函数只有在直接更新Model时才有效。否则,您必须使用fill()save()

标签: laravel laravel-4


【解决方案1】:

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

【讨论】:

  • 很遗憾他们没有 update() 或 save() 与新数据......但这有效。还请务必查看 Ardent 包(它通过验证和更新唯一性使事情变得更好)。
  • 有没有人得到这个错误:- 调用未定义的方法 Illuminate\Database\Query\Builder::fill()
  • 在 Laravel 5 上工作。Muchas gracias。
  • 我也收到错误:调用未定义的方法 Illuminate\Database\Query\Builder::fill() 请有人帮忙!
  • 关于Call to undefined method Illuminate\Database\Query\Builder::fill(),使用查询构建器和 Eloquent 方法是有区别的。请参阅 laravel.com/docs/8.x/querieslaravel.com/docs/8.x/eloquent
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    你正在寻找这个:

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

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

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效
    【解决方案4】:

    试试这个,

    // 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-09-19
    • 1970-01-01
    • 2019-09-15
    • 1970-01-01
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    • 2020-08-19
    相关资源
    最近更新 更多