Laravelピボットテーブルが無効な外部キーを持つ
質問
ピボットテーブルは次のように設定されています:
user_roles
user_id //fk->users.id
assoc_id //nullable fk->association.id
role //varchar
.
データベースをこのように設定しました。役割は多くの関係に多くの関係を表します。関連付けには多くのユーザーがあり、ユーザーは多くの協会にある可能性があります。すべてのユーザーには、協会内に役割があります。
しかし、関連付けの外側に存在できる役割がいくつかあります。データベースは、assoc_id
フィールドにNULL値を受け入れるように設定されており、コマンドラインから手動で挿入することができますが、
$user->roles()->attach(NULL, "outside contractor");
.
私のシードファイルでは、
というエラーが発生します[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 ())
.
これはここで最初の引数を参照してはいけないので、これは特に混乱していますか?assoc_id
を有効なNULL
に置き換える
$user->roles()->attach(1, "outside contractor");
.
挿入はうまく機能し、最初の引数はテーブル内のassoc_id
を参照します。
何が間違っているのか?
解決
attach
/ sync
のキー/キーを証明していない場合は、elomoentは何も挿入しません。あなたがしようとしていることは次のとおりです。
xとnull
の間のリンクを作成するこれはORMが何をするべきかではありません。
その代わりに手動で挿入します。
$data = [
'user_id' => 99,
'assoc_id' => null,
'role' => 'outside contractor'
];
DB::table('user_roles')->insert($data);
. 所属していません StackOverflow