Я выполняю миграции на Laravel 5.1 и переключаю базы данных с Mysql на Postgres.
Обычно я могу установить проверки внешнего ключа на 0 до запуска down
миграций как таковых:
- DB::statement('SET FOREIGN_KEY_CHECKS = 0');
- Do stuff
- DB::statement('SET FOREIGN_KEY_CHECKS = 1');
Postgres не предлагает этого.
При запуске миграцийОшибка1014 *
СОВЕТ: используйте DROP ... CASCADE, чтобы отбрасывать и зависимые объекты.(SQL: отбрасываемая таблица "table2")
Вопрос : Эта жалоба мне любопытна, поскольку я задаю ->onDelete('cascade');
для создания внешнего ключа.Почему это происходит?
Фрагменты:
Создать таблицу Table1:
...
public function down()
{
Schema::drop('table1_table2');
Schema::drop('table1');
}
Создать таблицу Table2 (Вызывается после переноса таблицы 1):
...
public function down()
{
Schema::drop('table2');
}
Создать таблицу внешних ключей (последняя вызванная миграция)
public function up()
{
Schema::table('table1_table2', function(Blueprint $table)
{
$table->foreign('table1_id')->references('id')->on('table1')->onDelete('cascade');
$table->foreign('table2_id')->references('id')->on('table2')->onDelete('cascade');
});
...
}
public function down()
{
...
Schema::table('table1_table2', function(Blueprint $table)
{
$table->dropForeign('table1_id');
$table->dropForeign('table2_id');
});
...
}