我有以下型号:
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());
为什么会这样?
答案 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。