テーブルにuser_id fk列があります
$table->foreign('user_id')->references('id')->on('users');
この既存の列にカスケード削除時機能を追加する必要があります。これどうやってするの?
最初に外部キーをドロップします。 Razor に感謝します
$table->dropForeign('answers_user_id_foreign');
$table->foreign('user_id')
->references('id')->on('users')
->onDelete('cascade');
Laravelスキーマビルダーは現在の状態では列を変更できないため、生のクエリを使用します。 制約をドロップして再作成する必要があります。
PostgreSQL
function up()
{
DB::statement('alter table answers drop constraint answers_user_id_foreign,
add constraint answers_user_id_foreign
foreign key (user_id)
references users(id)
on delete cascade;'
);
}
function down()
{
DB::statement('alter table answers drop constraint answers_user_id_foreign,
add constraint answers_user_id_foreign
foreign key (user_id)
references users(id);'
);
}
MySQL
function up()
{
DB::statement('alter table answers drop FOREIGN KEY answers_user_id_foreign;');
DB::statement('alter table answers add constraint answers_user_id_foreign
foreign key (user_id)
references users(id)
on delete cascade;'
);
}
function down()
{
DB::statement('alter table answers drop FOREIGN KEY answers_user_id_foreign;');
DB::statement('alter table answers add constraint answers_user_id_foreign
foreign key (user_id)
references users(id);'
);
}
私の場合、エラーになる配列に列名を入れる必要があります。
Schema::table('transactions', function (Blueprint $table) {
$table->dropForeign(['transactions_order_id_foreign']);
$table->foreign('order_id')
->references('id')->on('orders')
->onDelete('cascade')
->change();
});
mysql 5.7 ver
質問にお答えいただきありがとうございます。 L5.1のこの作業コードを手伝ってください:
public function up()
{
Schema::table('transactions', function (Blueprint $table) {
$table->dropForeign('transactions_order_id_foreign');
$table->foreign('order_id')
->references('id')->on('orders')
->onDelete('cascade')
->change();
});
Schema::table('orders', function (Blueprint $table) {
$table->dropForeign('orders_user_id_foreign');
$table->foreign('user_id')
->references('id')->on('users')
->onDelete('cascade')
->change();
});
}
$table->foreign('user_id')
->references('id')->on('users')
->onDelete('cascade');
_$table->integer('user_id')->unsigned();
$table->foreign('user_id')
->references('id')->on('users')
->onDelete('cascade');
_
_users.id
_を作成するためにIlluminate\Database\Schema\Blueprint::primary()
を使用したと仮定しています。その場合、_users.id
_は符号なしになります。したがって、外部キー列_user_id
_も署名されていない必要があります。
Farid Movsumovの答えは私のために働いた。 MySQL構造で「answers_user_id_foreign」を確認する必要があります。下のphpmyadminにはインデックスと呼ばれるテーブルがあり、同等のテーブルがあります
現在の移行では、user_id
に符号なし関数を使用します。
$table->interger('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('table_name')->onDelete('cascade');