删除时如何处理 MySql + Laravel 中的外键约束?

How can I deal with foreign key constraints in MySql + Laravel on delete?

我有一个看起来像这样的 slots table。过于简化,但有助于演示:

Date Service_id
2021-11-03 1
2021-11-04 2

基本上,用户选择日期和他想要的服务。这是一个预订系统。还有一个外键关系从上面的service_id到servicestable.

的id
id name
1 Haircut
2 Manicure
3 Massage

我对插槽 table 的迁移包含以下内容:

Schema::table('slots', function (Blueprint $table) {
     $table->foreignId('service_id')->nullable()->constrained();
});

我现在想要做的是能够删除服务,而不会从插槽中的现有记录中抛出任何错误 table。

你可以 $table->nullOnDelete(); 但这样插槽 table 中的列 Service_id 应该可以为空:

Schema::table('slots', function (Blueprint $table) {
     $table->foreignId('service_id')->nullable()->constrained()->nullOnDelete();
});

这样,插槽中的相应行将在 Service_id 列中为空。

另一种方法是使用->cascadeOnDelete(),这样,当您删除服务时,所有相关的插槽将被删除:

 Schema::table('slots', function (Blueprint $table) {
         $table->foreignId('service_id')->nullable()->constrained()->cascadeOnDelete();
});