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)
);