Laravel 5.2根据Input中的字段设置模型属性

时间:2016-04-27 14:23:50

标签: eloquent laravel-5.2

我有庞大的用户更新表单。有时更新包含大量字段,有时只有一两个字段。这是我的代码:

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()方法。

3 个答案:

答案 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);
}
相关问题