Laravel 5删除一对多的关系

时间:2015-12-28 20:37:15

标签: laravel relationship one-to-many sql-delete cascade

我有两张桌子:   - 产品   - 主题

产品属于主题 - 主题有很多产品。

我想删除主题并删除它与任何产品的关联。在一个完美的世界中,删除主题会重置相关的产品' theme_id为NULL。在我的Products表中,我尝试过 - > onDelete(' cascade')但这会删除主题和相应的产品。如果我没有实现 - > onDelete(' cascade')我会收到此错误:

QLSTATE [23000]:完整性约束违规:1452无法添加或更新子行:外键约束失败(acmeproducts,CONSTRAINT products_theme_id_foreign FOREIGN KEY({{ 1}})参考theme_idthemes)ON DELETE CASCADE)(SQL:更新id设置products =,theme_id = 2015-12-28 20 :20:05 updated_at = 1)

任何建议都会非常有用。谢谢!

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');
    });