Laravel 5删除一对多关系

Laravel 5删除一对多关系,laravel,relationship,one-to-many,sql-delete,cascade,Laravel,Relationship,One To Many,Sql Delete,Cascade,我有两张桌子: -产品 -主题 产品属于一个主题——主题有很多产品 我想删除一个主题并删除它与任何产品的关联。在完美世界中,删除主题会将相关产品的主题id重置为空。在我的产品表中,我尝试了->onDelete('cascade'),但这会同时删除主题和相应的产品。如果我没有实现->onDelete('cascade'),我会得到以下错误: QLSTATE[23000]:完整性约束冲突:1452无法添加或更新子行:外键约束失败(acmeproducts,约束products\u-theme\u-i

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

产品属于一个主题——主题有很多产品

我想删除一个主题并删除它与任何产品的关联。在完美世界中,删除主题会将相关产品的主题id重置为空。在我的产品表中,我尝试了->onDelete('cascade'),但这会同时删除主题和相应的产品。如果我没有实现->onDelete('cascade'),我会得到以下错误:

QLSTATE[23000]:完整性约束冲突:1452无法添加或更新子行:外键约束失败(
acme
products
,约束
products\u-theme\u-id\u-foreign
外键(
theme\u-id
)引用
themes
id
)关于删除级联)(SQL:update
products
set
theme\u id
=,
update\u于
=2015-12-28 20:20:05,其中
id
=1)


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

您必须将产品外键onDelete定义为null,并将外键字段定义为null

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

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