2015-11-16 93 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]);