【问题标题】:Laravel 5.2 set model attributes based on fields in InputLaravel 5.2 根据 Input 中的字段设置模型属性
【发布时间】:2016-04-27 14:23:49
【问题描述】:

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

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

【问题讨论】:

  • 您的意思是根据您的请求自动设置属性?

标签: eloquent laravel-5.2


【解决方案1】:
$user->update($request->all());

确保在 $fillable 数组中为 User 模型指定了所有必要的变量

如果你想更新模型属性而不保存使用fill方法

【讨论】:

  • 感谢您的回答。但是 update() 函数会导致更新数据库。我只想在触摸数据库之前将所有参数从请求分配给模型。应在脚本末尾使用 save() 方法触摸数据库。
  • 太棒了!这正是我一直在寻找的。您能否更新答案以便我接受?
【解决方案2】:

如果 $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

【讨论】:

  • 感谢您的回答。但是 update() 函数会导致更新数据库。我只想在触摸数据库之前将所有参数从请求分配给模型。应在脚本末尾使用 save() 方法触摸数据库。
  • save() 之前你还在做什么?
【解决方案3】:

对于用户模型

/**
* 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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多