次のような移行を使用してテーブルを作成しました。
public function up()
{
Schema::create('despatch_discrepancies', function($table) {
$table->increments('id')->unsigned();
$table->integer('pick_id')->unsigned();
$table->foreign('pick_id')->references('id')->on('picks');
$table->integer('pick_detail_id')->unsigned();
$table->foreign('pick_detail_id')->references('id')->on('pick_details');
$table->integer('original_qty')->unsigned();
$table->integer('shipped_qty')->unsigned();
});
}
public function down()
{
Schema::drop('despatch_discrepancies');
}
このテーブルを変更し、外部キー参照と列pick_detail_id
を削除して、columnのsku
後に呼び出される新しいvarchar列を追加する必要がありpick_id
ます。
そこで、次のような別の移行を作成しました。
public function up()
{
Schema::table('despatch_discrepancies', function($table)
{
$table->dropForeign('pick_detail_id');
$table->dropColumn('pick_detail_id');
$table->string('sku', 20)->after('pick_id');
});
}
public function down()
{
Schema::table('despatch_discrepancies', function($table)
{
$table->integer('pick_detail_id')->unsigned();
$table->foreign('pick_detail_id')->references('id')->on('pick_details');
$table->dropColumn('sku');
});
}
この移行を実行すると、次のエラーが発生します。
[Illuminate \ Database \ QueryException]
SQLSTATE [HY000]:一般エラー:1025「./ dev_iwms_reboot / despatch_discrepancies」の名前を「./dev_iwms_reboot/#sql2-67c-17c464」に変更するとエラーが発生します(エラー番号:152)(SQL:テーブルの変更despatch_discrepancies
外部キーを削除pick_detail_id)[PDOException]
SQLSTATE [HY000]:一般エラー:1025「./ dev_iwms_reboot / despatch_discrepancies」の名前を「./dev_iwms_reboot/#sql2-67c-17c464」に変更するとエラーが発生します(エラー番号:152)
php artisan migrate:rollback
コマンドを実行してこの移行を元に戻そうとすると、Rolled back
メッセージが表示されますが、実際にはデータベースで何も実行されていません。
何が間違っているのでしょうか?外部キー参照を持つ列をどのように削除しますか?