Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 4:如何在雄辩的模型中更新多个字段?_Laravel_Laravel 4 - Fatal编程技术网

Laravel 4:如何在雄辩的模型中更新多个字段?

Laravel 4:如何在雄辩的模型中更新多个字段?,laravel,laravel-4,Laravel,Laravel 4,如何更新雄辩模型中的多个字段?假设我是这样得到的: $user = User::where("username", "=", "rok"); 然后我得到了所有这些模型参数: $new_user_data = array("email" => "rok@rok.com", "is_superuser" => 1, ...); 我不能只做: $user->update($new_user_data); 正确的方法是什么?我希望不是一个foreach 但是,以下方法确实有效。这

如何更新雄辩模型中的多个字段?假设我是这样得到的:

$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->fill($new_user_data)->save()我建议使用较短的代码,例如

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

您正在查找:

$user = User::where("username","rok")
                ->update( 
                       array( 
                             "email" => "rok@rok.com",
                             "is_superuser" => 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)
);

遗憾的是,他们没有更新()或保存()新数据…但这是可行的。另外,请务必查看Ardent软件包(它通过验证和更新uniques使事情变得更好)。是否有人遇到此错误:-调用undefined method Illumb\Database\Query\Builder::fill()在Laravel 5上工作。Muchas gracias。我也得到了错误:调用未定义的方法illumb\Database\Query\Builder::fill(),请有人帮忙!关于调用undefined方法illumb\Database\Query\Builder::fill()
,使用查询生成器和雄辩的方法之间存在差异。参见vs.虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接以供参考。如果链接页面发生更改,则仅链接答案可能无效。我认为,在更新多个列时,
update()
函数仅在直接更新模型时才起作用。否则,您必须使用
fill()
save()
。我想您遗漏了几行
// 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)
);