Laravel retten viele-zu-viele Beziehungen in Eloquent Mutatoren

8

Ich habe zwei Modelle mit einer Viele-zu-Viele-Beziehung. Ich möchte in der Lage sein, ein spezifisches Attribut mit einem Array von IDs zu setzen und die Beziehung in dem Mutator wie folgt zu machen:

%Vor%

Die Funktion setTagsAttribute funktioniert jedoch nicht wie erwartet. Ich erhalte den folgenden Fehler: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'profile_id' cannot be null (SQL: insert into profile_tag ( profile_id , tag_id ) values (?, ?)) (Bindings: array ( 0 => NULL, 1 => 1, ))

    
Jon Koops 02.12.2013, 23:41
quelle

4 Antworten

19

Sie können viele-zu-viele-Beziehungen erst anhängen, nachdem Sie das Modell gespeichert haben. Rufen Sie save() im Modell auf, bevor Sie $model->tags festlegen, und Sie sollten OK sein. Der Grund dafür ist, dass das Modell eine ID haben muss, die Laravel in die Pivot-Tabelle einfügen kann, die die ID beider Modelle benötigt.

    
Andreas 11.12.2013, 19:43
quelle
3

Es sieht so aus, als ob Sie die Funktion falsch oder von einem nicht initialisierten Modell aufrufen. Der Fehler besagt, dass profile_id NULL ist. Wenn Sie also die Funktion als $profile->setTagsAttribute() aufrufen, müssen Sie sicherstellen, dass $ profile in der Datenbank mit einer ID initialisiert wird.

%Vor%

Zusätzlich können Sie ein Array an die attach-Funktion übergeben, um mehrere Modelle gleichzeitig anzuhängen:

%Vor%

Sie können auch das Modell anstelle der ID übergeben (aber ziemlich sicher Array von Modellen wird nicht funktionieren)

    
TonyArra 09.12.2013 19:25
quelle
2

Versuchen Sie es mit der Synchronisierungsmethode:

%Vor%     
William Cahill-Manley 08.12.2013 02:16
quelle
-1

Greifen Sie nicht über die Funktion tags() auf die Tags zu, sondern verwenden Sie die Eigenschaft tags . Verwenden Sie den Funktionsnamen, wenn Sie der Beziehungsabfrage zusätzliche Parameter hinzufügen möchten, und die Eigenschaft, wenn Sie nur die Tags abrufen möchten. tags() funktioniert in Ihrem Getter, weil Sie get() am Ende verwenden.

%Vor%     
Dwight 03.12.2013 06:53
quelle

Tags und Links