Eu criei uma tabela usando a migração como esta:
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');
}
Eu preciso mudar esta tabela e descartar a referência de chave estrangeira e coluna pick_detail_id
e adicionar uma nova coluna varchar chamada sku
após pick_id
coluna.
Então, criei outra migração, que se parece com isto:
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');
});
}
Quando executo essa migração, recebo o seguinte erro:
[Illuminate \ Database \ QueryException]
SQLSTATE [HY000]: Erro geral: 1025 Erro na renomeação de './dev_iwms_reboot/despatch_discrepancies' para './dev_iwms_reboot/#sql2-67c-17c464' (errno: 152) (tabela SQL: alterdespatch_discrepancies
largar chave estrangeira pick_detail_id)[PDOException]
SQLSTATE [HY000]: Erro geral: 1025 Erro na renomeação de './dev_iwms_reboot/despatch_discrepancies' para './dev_iwms_reboot/#sql2-67c-17c464' (errno: 152)
Quando tento reverter essa migração executando o php artisan migrate:rollback
comando, recebo uma Rolled back
mensagem, mas na verdade não está fazendo nada no banco de dados.
Alguma ideia do que pode estar errado? Como você elimina uma coluna que tem uma referência de chave estrangeira?