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 框架的设计哲学。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
贡献者:1