我有庞大的用户更新表单。有时更新包含大量字段,有时只有一两个字段。这是我的代码:
public function updateUser(Request $request){
$user = User::where('id',$request->id)->firstOrFail();
if($request->first_name){
$user->first_name= $request->first_name;
}
if($request->last_name){
$user->last_name = $request->last_name;
}
if($request->job_name){
$user->job_name= $request->job_name;
}
//etc.. 20 more fields
$user->save();
可以根据$request
中的字段设置模型属性吗?有时$request
包含1个字段,有时为20.请注意我想仅触摸一次数据库,最后使用save()方法。
答案 0 :(得分:2)
$user->update($request->all());
确保在$fillable
模型的User
数组中指定了所有必需的变量
如果要更新模型属性而不保存使用fill
方法
答案 1 :(得分:0)
如果$request
字段名称和Model
字段名称相同(就像您当前的代码中所示),请尝试以下操作:
$input = $request->all();
$user = User::firstOrFail('id',$input->id);
$updateNow = $user->update($input);
另一种选择是:
DB::table('users')
->where('id', $request->id)
->update($request); //or can use Input::all()
还要查看它以获得更多解释:Query Builder
答案 2 :(得分:0)
用户模型
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password', 'facebook_id', 'job_name', '20 more fields...'
];
控制器
public function store(Request $request){
$allRequest = $request->all();
// It is not in table
unset($allRequest['_token']);
User::create($allRequest);
}