Frage

Ich habe eine Pivot-Tabelle wie folgt eingerichtet:

user_roles
  user_id //fk->users.id
  assoc_id //nullable fk->association.id
  role //varchar

Ich habe meine Datenbank auf diese Weise eingerichtet, weil Rollen eine Viele-zu-Viele-Beziehung darstellen:eine Assoziation hat viele Benutzer, und ein Benutzer kann in vielen Assoziationen sein.jeder Benutzer hat eine Rolle innerhalb einer Assoziation.

Es gibt jedoch einige Rollen, die außerhalb einer Assoziation existieren können.Die Datenbank ist so konfiguriert, dass sie einen Nullwert in der Datenbank akzeptiert assoc_id feld und ich kann manuell eines über die Befehlszeile einfügen, aber wenn ich versuche auszuführen

$user->roles()->attach(NULL, "outside contractor");

in meiner Seed-Datei wird eine Fehlermeldung angezeigt

[Illuminate\Database\QueryException]                                         
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update   
a child row: a foreign key constraint fails (`database`.`user_roles`, CONSTR  
AINT `user_roles_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users  
` (`id`)) (SQL: insert into `user_roles` () values ()) 

dies ist besonders verwirrend, denn sollte sich das erste Argument hier nicht auf das beziehen assoc_id?Wenn ich das ersetze NULL mit einem gültigen assoc_id,

$user->roles()->attach(1, "outside contractor");

die Einfügung funktioniert einwandfrei und das erste Argument bezieht sich auf das assoc_id in der Tabelle.

Was läuft schief?

War es hilfreich?

Lösung

Wenn Sie keinen Schlüssel / Schlüssel für attach/sync, Eloquent wird nichts einfügen.Es ist eher erwartetes Verhalten, da Sie versuchen, Folgendes zu tun:

Erstellen Sie eine Verknüpfung zwischen X und null

das ist nicht das, was ORM tun soll.

Fügen Sie diese Zeilen stattdessen manuell ein:

$data = [
   'user_id' => 99, 
   'assoc_id' => null, 
   'role' => 'outside contractor'
];

DB::table('user_roles')->insert($data);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top