【发布时间】:2018-05-14 21:29:36
【问题描述】:
我正在 Laravel 5.1 上运行迁移,并将 DB 从 Mysql 切换到 Postgres。
通常我可以在运行 down 迁移之前将外键检查设置为 0:
- DB::statement('SET FOREIGN_KEY_CHECKS = 0');
- Do stuff
- DB::statement('SET FOREIGN_KEY_CHECKS = 1');
Postgres 不提供此功能。
在运行迁移时,我收到错误:
依赖对象仍然存在:7 错误:无法删除表 table2,因为其他对象依赖于它
DETAIL:table1_table2 上的约束 table1_table2_table1_id_foreign 依赖于 table2
提示:使用 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');
});
...
}
【问题讨论】:
标签: laravel postgresql laravel-5.1