質問

ピボットテーブルは次のように設定されています:

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);
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top