Laravel 5 删除一对多关系
Laravel 5 Deleting a one-to-many relationship
我有两个 table:
- 产品
- 主题
产品属于一个主题 - 主题有很多产品。
我想删除一个主题并删除它与任何产品的关联。在理想情况下,删除主题会将相关产品的 theme_id 重置为 NULL。在我的产品 table 中,我尝试了 ->onDelete('cascade') 但这同时删除了主题和相应的产品。如果我不执行 ->onDelete('cascade') 我会得到这个错误:
QLSTATE[23000]:违反完整性约束:1452 无法添加或更新子行:外键约束失败(acme
.products
,CONSTRAINT products_theme_id_foreign
FOREIGN KEY ( theme_id
) 参考文献 themes
(id
) 删除级联) (SQL: 更新 products
设置 theme_id
= , updated_at
= 2015-12-28 20:20:05 其中 id
= 1)
任何建议都会非常有帮助。谢谢!
您必须定义您的产品外键 onDelete 以设置 null 以及外键字段为 nullable
Schema::create('products', function(Blueprint $t) {
...
$t->integer('theme_id')->unsigned()->nullable();
...
$t->foreign('theme_id')->references('id')->on('themes')
->onDelete('set null');
});
我有两个 table: - 产品 - 主题
产品属于一个主题 - 主题有很多产品。
我想删除一个主题并删除它与任何产品的关联。在理想情况下,删除主题会将相关产品的 theme_id 重置为 NULL。在我的产品 table 中,我尝试了 ->onDelete('cascade') 但这同时删除了主题和相应的产品。如果我不执行 ->onDelete('cascade') 我会得到这个错误:
QLSTATE[23000]:违反完整性约束:1452 无法添加或更新子行:外键约束失败(acme
.products
,CONSTRAINT products_theme_id_foreign
FOREIGN KEY ( theme_id
) 参考文献 themes
(id
) 删除级联) (SQL: 更新 products
设置 theme_id
= , updated_at
= 2015-12-28 20:20:05 其中 id
= 1)
任何建议都会非常有帮助。谢谢!
您必须定义您的产品外键 onDelete 以设置 null 以及外键字段为 nullable
Schema::create('products', function(Blueprint $t) {
...
$t->integer('theme_id')->unsigned()->nullable();
...
$t->foreign('theme_id')->references('id')->on('themes')
->onDelete('set null');
});