我有两张桌子: - 产品 - 主题
产品属于主题 - 主题有很多产品。
我想删除主题并删除它与任何产品的关联。在一个完美的世界中,删除主题会重置相关的产品' theme_id为NULL。在我的Products表中,我尝试过 - > onDelete(' cascade')但这会删除主题和相应的产品。如果我没有实现 - > onDelete(' cascade')我会收到此错误:
QLSTATE [23000]:完整性约束违规:1452无法添加或更新子行:外键约束失败(acme
。products
,CONSTRAINT products_theme_id_foreign
FOREIGN KEY({{ 1}})参考theme_id
(themes
)ON DELETE CASCADE)(SQL:更新id
设置products
=,theme_id
= 2015-12-28 20 :20:05 updated_at
= 1)
任何建议都会非常有用。谢谢!
答案 0 :(得分:2)
您必须将产品外键onDelete定义为设置null,并将外键字段设置为可为空
Schema::create('products', function(Blueprint $t) {
...
$t->integer('theme_id')->unsigned()->nullable();
...
$t->foreign('theme_id')->references('id')->on('themes')
->onDelete('set null');
});