【发布时间】:2015-11-16 16:31:50
【问题描述】:
我想要做的是,当创建一个新的候选人时,一个额外的字段会自动填充到连接数据透视表中,并带有随机字符串。
这是我的数据透视表:
结果表(数据透视表)
id cert_number candidate_id qualification_id
1 ? 17 2
2 ? 17 1
3 ? 57 1
所以在我的候选控制器中,我有:
public function store(CandidateRequest $request)
{
$candidateInput = Input::get('candidates');
foreach ($candidateInput as $candidate)
{
$candidate = Candidate::create($candidate);
$candidate->centre()->attach(Auth::user()->centre);
$qualification_id = $request->input('qualification_id');
$candidate->qualification()->attach($qualification_id);
$cert_number = Str::random(10);
$candidate->qualification()->attach($cert_number);
}
return redirect('candidates');
}
它完美地添加了 center_id 和qualification_id,但它不会将随机字符串拉入 cert_nubmer 字段。
在我的候选模型中,我有
public function result()
{
return $this->hasMany('App\Result')->withTimestamps();
}
public function qualification()
{
return $this->belongsToMany('App\Qualification', 'Results', 'candidate_id', 'qualification_id')->withPivot('status','cert_number','partial_claim')->withTimestamps();
}
在我的结果模型中:
public function candidate()
{
return $this->belongsTo('App\Candidate')->withTimestamps();
}
public function qualification()
{
return $this->belongsTo('App\Qualification');
}
谁能看出我哪里出错了?
谢谢。
【问题讨论】:
-
如果你这样做,输出是什么:
dd($cert_number)? -
"nbRLEUFuqA" 所以它生成了一个随机字符串,只是没有传递它
-
这是错误:SQLSTATE[23000]:完整性约束违规:1452 无法添加或更新子行:外键约束失败(
vault3.results,CONSTRAINTresult_qualification_id_foreignFOREIGN KEY (qualification_id) REFERENCESqualifications(id)) (SQL: insert intoResults(candidate_id,created_at,qualification_id,updated_at) 值 (412, 2015-11-16 16:41:19, A1WzVHh1OX, 2015-11-16 16:41:19)) -
在我看来,问题出在
qualifications和某处的关系上。但是,这可能是因为您正试图对数据做一些奇怪的事情。如果您删除尝试附加证书会发生什么? -
还有(没真正用过
attach)但是这不就说明两者之间有关系吗?前两个candidate、qualification正在插入到表中,因为您已经定义了它们的关系,但是我看不到您在哪里定义了certificate?如果此字段不是关系字段,即没有关系,则附加可能是将 cert_id 插入数据库的不好方法
标签: laravel-5 eloquent pivot-table