dua*_*ty_ 26 laravel laravel-4
如何更新Eloquent模型中的多个字段?让我们说我得到这样的:
$user = User::where("username", "=", "rok");
Run Code Online (Sandbox Code Playgroud)
然后我有所有这些模型参数:
$new_user_data = array("email" => "rok@rok.com", "is_superuser" => 1, ...);
Run Code Online (Sandbox Code Playgroud)
我不能这样做:
$user->update($new_user_data);
Run Code Online (Sandbox Code Playgroud)
什么是正确的方法?我希望不是foreach
.
但是,以下情况确实有效.这是要走的路吗?
User::where("id", "=", $user->id)->update($new_user_data);
Run Code Online (Sandbox Code Playgroud)
最后一个问题(除了它很笨重)是当从对象上下文中使用它时,更新的字段在$this
变量中不可见.
J.T*_*mes 60
您正在寻找的方法是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();
Run Code Online (Sandbox Code Playgroud)
实际上,你可以做,$user->fill($new_user_data)->save();
但我发现单独的语句更容易阅读和调试.
小智 9
您正在寻找:
$user = User::where("username","rok")
->update(
array(
"email" => "rok@rok.com",
"is_superuser" => 1,
// ..
)
);
Run Code Online (Sandbox Code Playgroud)
请参阅:http://laravel.com/docs/4.2/eloquent#insert-update-delete
小智 5
我应该建议使用较短的代码,例如
$new_user_data=array('a'=>'n','b'=>'m');
$user=User::whereUsername('rok');//camelCase replaces "=" sign
$user->fill($new_user_data)->save();
Run Code Online (Sandbox Code Playgroud)
甚至更短
$new_user_data=array('a'=>'n','b'=>'m');
User::whereUsername('rok')->update($new_user_data);//camelCase replaces "=" sign
Run Code Online (Sandbox Code Playgroud)
我相信最后一条语句更容易调试并且看起来更好。
警告:如果您的表包含许多名为 'rok' 的用户,上述两个语句将立即更新所有这些寄存器。您应该始终使用 id 字段值更新寄存器。
归档时间: |
|
查看次数: |
42920 次 |
最近记录: |