【问题标题】:Laravel what is correct way to implement cascade ondelete?Laravel实现级联ondelete的正确方法是什么?
【发布时间】:2025-12-23 08:40:07
【问题描述】:

我正在使用 Laravel,我有一个一对多的关系。让我们说一个有很多孩子的父母。如果父项被删除,我想删除所有子项。我对答案有 99.99% 的把握,但是假设是所有错误的根源,所以我想确定一下。

我了解架构生成器中有一个 onDelete('cascade') 选项。我将它用于子模式:

Schema::table('children', function (Blueprint $table) {
    $table->foreign('parent_id')->references('id')->on('parents')->onDelete('cascade');
});

这是否意味着如果删除父级,关联的子级也会被删除,还是意味着如果删除子级,父级也会被删除?

【问题讨论】:

    标签: laravel database-schema


    【解决方案1】:

    执行以下操作(正如您已经输入的那样):

    Schema::table('children', function (Blueprint $table) {
        $table->foreign('parent_id')->references('id')->on('parents')->onDelete('cascade');
    });
    

    这意味着每当删除父级时,关联的子级也会被删除,反之亦然,这意味着如果删除了一个子级,则父级不会被删除。

    【讨论】:

      【解决方案2】:

      这意味着如果父级被删除,外键也会级联删除子级,如果父级没有软删除,那么你需要自己级联删除。

      【讨论】:

        最近更新 更多