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

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

上一篇 下一篇
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
贡献者:1