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 网站上。

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

上一篇 下一篇
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
贡献者:1