2015-11-16 87 views
1

我想要做的是当一个新的候选人创建一个额外的字段自动填充连接数据透视表中随机刺。Laravel 5枢轴表额外字段

这里是我的透视表:

结果表(支点)

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'); 
} 

它添加centre_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'); 
} 

任何人都可以看到我要去错了吗?

谢谢。

+0

如果你这样做,输出是什么:'dd($ cert_number)'? – Phorce

+0

“nbRLEUFuqA”因此,它生成一个随机字符串只是不传递它 – 0w3n86

+0

这是错误:SQLSTATE [23000]:完整性约束违规:1452无法添加或更新子行:外键约束失败('vault3'。 (结果),CONSTRAINT'result_qualification_id_foreign' FOREIGN KEY('qualification_id')REFERENCES'qualifications'('id'))(SQL:insert into'Results'('candidate_id','created_at','qualification_id','updated_at')值(412,2015-11-16 16:41:19,A1WzVHh1OX,2015-11-16 16:41:19)) – 0w3n86

回答

1

附加不起作用。

让我拿出两行代码:

$candidate->qualification()->attach($qualification_id); 
$candidate->qualification()->attach($cert_number); 

您正在尝试添加$ cert_number作为qualification_id,这就是为什么它失败。当你这样做时,Laravel应该如何知道第二行($ cert_number)是一个额外的枢轴列?它没有。你有两行代码完全一样,所以你不能指望Laravel知道第二行应该做一些不同的事情。

当你想插入额外的数据到其他数据透视表中时,你需要把它们作为数组传递给第二个参数。类似这样的:

$candidate->qualification()->attach($qualification_id, ['cert_number' => $cert_number]);