024. 级联处理软删除关系——askedio/laravel-soft-cascade

级联处理软删除关系——askedio/laravel-soft-cascade

当某个模型被删除的时候,我们需要联动删除这个模型关联的其他模型,比如某个话题下面有很多条回复,当这个话题被删除了之后,需要将话题的回复数据删除,否则就变成了垃圾数据。

处理这样模型之间的联动删除一般有两种方法:

  1. 创建数据库外键索引;
    例如可以给回复表增加外键
    $table->foreign('topic_id')->references('id')->on('topics')->onDelete('cascade');

    这样话题删除后,对应的回复数据会同时删除。

  2. 通过逻辑控制,借助模型的事件,触发关联模型的删除。

两种方式都可以实现需求,外键的方式会更加的简单,但是外键会带来额外数据库的开销,当 Web 应用请求量大,数据库遇到瓶颈的时候,可能会去除外键,通过逻辑控制进行级联删除,因为 DB Server 成本要更高。

不过一旦模型使用了软删除,那么外键的方式就彻底不能用了,数据并没有真实的从数据库中删除,所以必须手动添加级联删除的逻辑。

场景分析

先来看一下 LaraBBS 现有的处理,话题数据删除的时...

本文章首发在 LearnKu.com 网站上。

为了保证课程的高品质,我们需要对课程进行收费。付费后 才能观看剩余内容。 购买

上一篇 下一篇
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
贡献者:1