如何在删除时处理 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 中的外键约束?的主要内容,如果未能解决你的问题,请参考以下文章