発生したエラー
- migration
ここではshopsテーブルにuser_idを追加するとする
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddUserIdToShopsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('shops', function (Blueprint $table) {
$table->unsignedBigInteger('user_id')->nullable();
$table->foreign('user_id')->references('id')->on('users')->onDelete('CASCADE');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('shops', function (Blueprint $table) {
$table->dropColumn('user_id');
});
}
}
- エラー文言
SQLSTATE[HY000]: General error: 1553 Cannot drop index 'shops_user_id_foreign': needed in a foreign key constraint (SQL: alter table shops
drop user_id
)
外部キーが貼ってあるからカラムを削除できないよというエラー
外部キーを削除してからdropすると解決
- migration
downメソッドに外部キーを削除する処理を加える
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddUserIdToShopsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('shops', function (Blueprint $table) {
$table->unsignedBigInteger('user_id')->nullable();
$table->foreign('user_id')->references('id')->on('users')->onDelete('CASCADE');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('shops', function (Blueprint $table) {
// ★ 追加 (外部キー名は{テーブル名}_{カラム名}_foreign)
$table->dropForeign('shops_user_id_foreign');
$table->dropColumn('user_id');
});
}
}
Laravelのマイグレーションにて、外部キーを貼ったカラムを追加後、
ロールバックをしようとするとエラーが発生した