如何在删除时处理 MySql + Laravel 中的外键约束?
Posted
技术标签:
【中文标题】如何在删除时处理 MySql + Laravel 中的外键约束?【英文标题】:How can I deal with foreign key constraints in MySql + Laravel on delete? 【发布时间】:2022-01-02 01:55:44 【问题描述】:我有一个看起来像这样的 slots 表。过于简化,但有助于演示:
Date | Service_id |
---|---|
2021-11-03 | 1 |
2021-11-04 | 2 |
基本上,用户选择一个日期和他想要的服务。这是一个预订系统。从上面的 service_id 到 services 表的 id 还有一个外键关系。
id | name |
---|---|
1 | Haircut |
2 | Manicure |
3 | Massage |
我的槽表迁移包含以下内容:
Schema::table('slots', function (Blueprint $table)
$table->foreignId('service_id')->nullable()->constrained();
);
我现在想做的是能够删除服务,而不会从槽表中的现有记录中抛出任何错误。
【问题讨论】:
【参考方案1】:你可以$table->nullOnDelete(); 但是这样槽表中的Service_id 列应该可以为空:
Schema::table('slots', function (Blueprint $table)
$table->foreignId('service_id')->nullable()->constrained()->nullOnDelete();
);
这样,slots 中对应的行在Service_id
列中会为空。
另一种方式是使用->cascadeOnDelete()
,这样当你删除一个服务时,所有相关的slot都会被删除:
Schema::table('slots', function (Blueprint $table)
$table->foreignId('service_id')->nullable()->constrained()->cascadeOnDelete();
);
【讨论】:
以上是关于如何在删除时处理 MySql + Laravel 中的外键约束?的主要内容,如果未能解决你的问题,请参考以下文章