Laravel 实现级联删除的正确方法是什么?
Laravel what is correct way to implement cascade ondelete?
我正在使用 Laravel 并且我有一个 one-to-many 关系。比方说 1 Parent 有许多 children。如果删除parent,我想删除所有children。我对答案有 99.99% 的把握,但是假设是所有错误之母,所以我想确定一下。
我知道架构生成器中有一个 onDelete('cascade') 选项。我在 children 模式中这样使用它:
Schema::table('children', function (Blueprint $table) {
$table->foreign('parent_id')->references('id')->on('parents')->onDelete('cascade');
});
这是否意味着如果 parent 被删除,关联的 children 也会被删除,或者这是否意味着如果 child 被删除,parent也被删除了?
通过执行以下操作(正如您已经输入的那样):
Schema::table('children', function (Blueprint $table) {
$table->foreign('parent_id')->references('id')->on('parents')->onDelete('cascade');
});
这意味着只要父项被删除,关联的子项也会被删除,反之亦然,这意味着如果删除了一个子项,父项将不会被删除。
这意味着如果删除父项,外键将级联并删除子项,如果父项没有软删除,在这种情况下,您需要自己级联删除。
我正在使用 Laravel 并且我有一个 one-to-many 关系。比方说 1 Parent 有许多 children。如果删除parent,我想删除所有children。我对答案有 99.99% 的把握,但是假设是所有错误之母,所以我想确定一下。
我知道架构生成器中有一个 onDelete('cascade') 选项。我在 children 模式中这样使用它:
Schema::table('children', function (Blueprint $table) {
$table->foreign('parent_id')->references('id')->on('parents')->onDelete('cascade');
});
这是否意味着如果 parent 被删除,关联的 children 也会被删除,或者这是否意味着如果 child 被删除,parent也被删除了?
通过执行以下操作(正如您已经输入的那样):
Schema::table('children', function (Blueprint $table) {
$table->foreign('parent_id')->references('id')->on('parents')->onDelete('cascade');
});
这意味着只要父项被删除,关联的子项也会被删除,反之亦然,这意味着如果删除了一个子项,父项将不会被删除。
这意味着如果删除父项,外键将级联并删除子项,如果父项没有软删除,在这种情况下,您需要自己级联删除。