Я создал таблицу с помощью миграции следующим образом:
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
и добавить новый столбец varchar, называемый sku
после 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
сообщение, но на самом деле оно ничего не делает в базе данных.
Есть идеи, что может быть не так? Как удалить столбец со ссылкой на внешний ключ?