Laravel 5.1批量分配可填充属性在更新时被忽略?

时间:2016-09-06 22:00:29

标签: laravel-5.1 mass-assignment

我有以下型号:

class User {

    public function recruiter()
    {
        return $this->hasOne('App\Recruiter');
     }

 }

 class Recruiter extends Model {

   public function jobs()
   {
      return $this->hasMany('App\Job');
    }

 }

 class Job extends Model {

    protected $fillable = [
      'job_type_id',
      'recruiter_id',
      'start_at',
      'end_at',
      'job_title',
      'job_ref',
      'job_desc'

    ];

     // other stuff
 }

当我调用以下create方法时,Job模型上的可填充属性按预期工作。

$job = Auth::user()->recruiter->jobs()->create($request->all());

当我调用更新方法时,可填充属性将被忽略,最终会导致质量分配漏洞。

Auth::user()->recruiter->jobs()->update($request->all());

为什么会这样?

2 个答案:

答案 0 :(得分:0)

这是因为你需要传递id的工作(Laravel不知道要更新什么)。因此添加到fillable数组。

class Job extends Model {

    protected $fillable = [
      'id',
      'job_type_id',
      'recruiter_id',
      'start_at',
      'end_at',
      'job_title',
      'job_ref',
      'job_desc'

    ];

     // other stuff
 }

答案 1 :(得分:0)

似乎有一个奇怪的错误。有了它,仍然在Laravel 5.7中。

您需要执行此操作,以尊重$ fillable:

$jobs = Auth::user()->recruiter->jobs();
$jobs->update($request->all());

不要问我为什么,但是如果您尝试:

(Auth::user()->recruiter->jobs())->update($request->all());

它只是忽略$ fillable。