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, ))
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.
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.
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)
Versuchen Sie es mit der Synchronisierungsmethode:
%Vor% 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.