2017-02-12 3 views
0

Ich versuche, Sync-Funktion, so zu verwenden:Laravel viele zu viele synchron mit null

$round->competitors()->sync($fighters); 

$ Kämpfer:

Collection {#339 ▼ 
    #items: array:3 [▼ 
    0 => 5 
    1 => null 
    2 => 6 
    ] 
} 

Wenn es um das Nullelement zu erhalten, die ich erhalten:

QueryException in Connection.php line 647: 
SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect integer value: '' for column 'competitor_id' at row 1 (SQL: insert into `round_competitor` (`competitor_id`, `round_id`) values (, 29)) 

ich das gleiche Ergebnis, wenn ich versuche:

$round->competitors()->sync([null, null]); 

Aber wenn ich versuche:

$round->competitors()->attach(null); 

es ohne Probleme funktioniert ???

Warum passiert das ???

Antwort

1

Rufen Sie filter() auf Ihrem $fighters, so dass die null Werte entfernt werden.

+0

sache ist ich brauche ein um es zu speichern: runde = 1, competidor = null, ist es nicht möglich? –

+0

Nein, das ist nicht so, wie das zu vielen Beziehungen funktioniert - es muss zwei Modelle verbinden. Was ist der Sinn eines Datensatzes, der auf eine Runde verweist, aber nicht auf einen Konkurrenten? – Dwight

+0

Es passiert häufig, wenn die Anzahl der Konkurrenten nicht perfekt ist. Wenn ich Runden von 3 Teilnehmern und insgesamt 8 Teilnehmern habe, wird zum Beispiel die letzte Gruppe von 3 eine leere Stelle haben. Ich muss diesen Raum beibehalten, ich kann ihn nicht einfach vergessen. Ich kann keinen Konkurrenten, der der Null ist, setzen und seine ID benutzen, weil ich auch eine UNIQUE Bedingung habe: $ table-> unique (['competitor_id', 'round_id']); –

0

Wenn Sie das tun: $round->competitors()->attach(null); ist es das gleiche wie wenn Sie nur keinen Anhang machen? Das ist wahrscheinlich, warum es funktioniert !!