2017-11-30 4 views
0

Ich versuche, Daten an meine 3-Wege-Pivot-Tabelle (bestehend aus einer User_id, Respondent_id und Company_id, die zusammen den Composite-Primärschlüssel ist).Laravel 5.5; Doppelte Eingabe auf 3-Wege-Pivot-Tabelle mit 3 Composite-Primärschlüssel

Wenn die Daten bereits in der Tabelle vorhanden erhalte ich eine doppelte Schlüsselnachricht (duh)

Ich habe versucht, dies zu verhindern, indem syncWithoutDetaching verwenden, aber es wirft immer noch eine doppelte Schlüssel Nachricht

Was ich versuchte zu tun ist folgende:

class Respondent extends Authenticatable 
{ 
    public function companies() 
    { 
     return $this->belongsToMany('App\Models\Company', 'company_user_respondent'); 
    } 
    public function attachPivot($company_id, $user_id) 
    { 
     //This will attach but if the keys exist it will send a duplication error 
     return $this->companies()->attach($company_id, ['user_id' => $user_id]); 
    } 
} 

Außerdem habe ich versucht, dies mit dem attachPivot Methode

public function attachPivot($company_id, $guide_id) 
{ 
    //Will allso send a duplication error, using just sync works but of course it will clean up my table which is not the goal. 
    return $this->companies()->syncWithoutDetaching([1 => ['company_id' => $company_id, 'guide_id' => $guide_id]]); 
} 

Ich könnte meine DB überprüfen, ob der Datensatz existiert, aber eine Abfrage jedes Mal zu tun ist nicht mein wünschenswertes Ziel, mein wünschenswertes Ziel ist, dass kein Datensatz eingefügt würde, ohne einen Fehler zu werfen oder die Tabelle ohne Abtrennen zu synchronisieren.

Antwort

0

Fand heraus, dass ich das, indem Sie folgende

try { 
    return $this->companies()->attach($company_id, ['user_id' => $user_id]); 
} catch (QueryException $exception) { 
    return $exception; 
} 

Jetzt kehrt sie entweder eine Ausnahme verhindern könnte, die ich die angegebenen Werte überprüfen oder anhängen.