Laravel 5 删除一对多关系

Posted

技术标签:

【中文标题】Laravel 5 删除一对多关系【英文标题】:Laravel 5 Deleting a one-to-many relationship 【发布时间】:2016-04-02 17:02:09 【问题描述】:

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

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

我想删除一个主题并删除它与任何产品的关联。在理想情况下,删除主题会将相关产品的 theme_id 重置为 NULL。在我的产品表中,我尝试过 ->onDelete('cascade') 但这会删除主题和相应的产品。如果我不执行 ->onDelete('cascade') 我会收到此错误:

QLSTATE[23000]:完整性约束违规:1452 无法添加或更新子行:外键约束失败(acme.products,CONSTRAINT products_theme_id_foreign FOREIGN KEY(theme_id)参考themes (id) ON DELETE CASCADE) (SQL: update products set theme_id = , updated_at = 2015-12-28 20:20:05 其中id = 1)

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

【问题讨论】:

【参考方案1】:

您必须定义您的产品外键 onDelete 以设置为空,并且外键字段也可以为空

  Schema::create('products', function(Blueprint $t) 
        ...
        $t->integer('theme_id')->unsigned()->nullable();
        ...

        $t->foreign('theme_id')->references('id')->on('themes')
            ->onDelete('set null');
    );

【讨论】:

以上是关于Laravel 5 删除一对多关系的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.8 在数据透视表上保存一对多关系

Laravel 5.4雄辩的一对多关系

在 Laravel 中同步一对多关系

Laravel 5.5中的一对多关系

Laravel - 一对多关系上的保存方法的对立面是啥?

Laravel 5.6 |雄辩的一对多关系