Menu

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 开发相关的进阶知识。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
刻意练习,每日精进。
5
点赞
1029
浏览
2
讨论
贡献者