Laravel 迁移 onDelete() 查询异常
Posted
技术标签:
【中文标题】Laravel 迁移 onDelete() 查询异常【英文标题】:Laravel Migration onDelete() Query Exception 【发布时间】:2019-10-05 15:59:36 【问题描述】:我有一个带有外键的简单 laravel 迁移。
public function up()
Schema::create('smp_posts', function (Blueprint $table)
$table->increments('id');
$table->integer('project_id')->unsigned();
// Some other stuff
$table->foreign('project_id')->references('id')->on('smp_projects')->onDelete('cascade');
);
当我运行迁移命令php artisan migrate:refresh
。我收到此错误:
照亮\数据库\查询异常:
SQLSTATE[2BP01]:依赖对象仍然存在:7
错误:无法删除表 smp_projects,因为其他对象依赖于它 详细信息:表 smp_posts 上的约束 smp_posts_project_id_foreign 取决于表 smp_projects
通常应该删除所有孩子,因为我将onDelete()
设置为级联。正确的?怎么了?
【问题讨论】:
可能 smp_projects 迁移的日期在 sms_posts 之后,请检查迁移的名称。 在 smp_projects 之后没有 smp_posts 【参考方案1】:您设置的cascade
选项仅在您删除一行时适用。如果您删除未触发约束的表,这就是您收到错误的原因。
您应该查看 Postgres 文档的 Dependency Tracking 部分
【讨论】:
以上是关于Laravel 迁移 onDelete() 查询异常的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 外键 onDelete('cascade') 不起作用
Laravel Migrations onDelete Restrict 不起作用
Eloquent - 如果外键有行,则防止删除数据 - Laravel
使用 PostgreSQL 更新 Laravel 迁移中的枚举列
我们可以在 Laravel 迁移中的单个 DB::statement("Query 1; Query 2") 中使用多个 SQL 查询吗?