【问题标题】:Laravel 5.1 Mass Assignment Fillable Properties Being Ignored on Update?Laravel 5.1 质量分配可填充属性在更新时被忽略?
【发布时间】:2016-09-06 22:00:29
【问题描述】:

我有以下型号:

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
 }

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

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

当我调用更新方法时,可填充属性被忽略并最终出现批量分配漏洞。

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

为什么会这样?

【问题讨论】:

  • 你试过var_dump()$request->all()吗?如果是,它返回什么?

标签: laravel-5.1 mass-assignment


【解决方案1】:

这是因为您还需要传递作业的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
 }

【讨论】:

    【解决方案2】:

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

    您需要这样做,以使其尊重 $fillable:

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

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

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

    它只是忽略了 $fillable。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-11
      • 2013-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多