删除时如何处理 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();
});
我有一个看起来像这样的 slots table。过于简化,但有助于演示:
Date | Service_id |
---|---|
2021-11-03 | 1 |
2021-11-04 | 2 |
基本上,用户选择日期和他想要的服务。这是一个预订系统。还有一个外键关系从上面的service_id到servicestable.
的idid | 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();
});