移行で外部キー制約を追加しようとしました。何らかの理由で、nullableに設定しても機能しますが、nullableにしないとうまく動作しません。なぜこれが起こり、どのように私はこれを解決できますか?Laravel - 1215外部キー制約を追加できません
これが行う作業:
Schema::create('role_user', function (Blueprint $table){
$table->increments('id');
$table->integer('role_id')->unsigned()->index();
$table->foreign('role_id')->references('id')->on('roles')->onDelete('set null');
$table->integer('user_id')->unsigned()->index()->nullable();
$table->foreign('user_id')->references('id')->on('users')->onDelete('set null');
$table->timestamps();
});
役割とユーザーテーブル、これらの制約を行う前に、既にexcist両方:
Schema::create('role_user', function (Blueprint $table){
$table->increments('id');
$table->integer('role_id')->unsigned()->index()->nullable();
$table->foreign('role_id')->references('id')->on('roles')->onDelete('set null');
$table->integer('user_id')->unsigned()->index()->nullable();
$table->foreign('user_id')->references('id')->on('users')->onDelete('set null');
$table->timestamps();
});
これは例外をスローします。私は彼らがヌル可能でないように(彼らは満たされなければならない)。エラー:
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table role_user add constraint role_user_role_id_foreign foreign key (role_id) references roles (id) on delete set null)
私もそれを理解して正しい順序で入れても、まだ動作しません。このSQLの一般的なエラーの種類が間違っている可能性のある幅広い範囲を持っていることは残念です。 – Markinson
ああ、私はあなたにも 'onDelete( 'set null');'を持っていることに気付きました。 -nullable。ロールが削除され、このエントリにカスケードしてnullに設定しようとすると、問題が発生します。おそらく、両方の外部キーを ' - > onDelete( 'cascade');に設定しようとしなければならないかもしれません;そのようにして、ユーザーまたはロールのいずれかが削除された場合、それらに関連する関連も削除されます。 –
いいです!私はそれを試して、それがすぐに働くかどうかを知らせます。 – Markinson