Laravel 模型实现连带删除

在实际项目中,我们可能需要在删除一个表中数据的时候,和它相关联的表也要有相应的操作(删除或修改),Laravel 提供了非常便捷的操作方法。

假设情况:
加入我们在写一个博客系统,那么就会有文章表、用户表,这两个表是相关联的,我们在删除用户的时候,同时删除用户对应的的文章数据,那么在 Laravel 中:
上代码:

// User模型
class User extends Eloquent {

    //与用户关联的文章表
    public  function posts() { 
        return  $this->hasMany('Post');
    }

    protected  static  function boot() { 
        parent::boot();
        //在删除用户的同时执行操作
        static::deleting(function($user) {
            // 删除与用户关联的文章
            $user->posts()->delete();
        });
    }
}

这样我们在删除用户的同时,与之有关系的文章数据也会被删除。
各位大佬,有时间可以在群里接下外包,单子很多!

bL9F7Ldlfg.jpg!large

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 7

这样写是可以删除掉用户下的文章,但是文章如果有评论,就尴尬了,不能连带删除

3年前 评论
半人间 2年前

mysql 设置外键级联删除就可以了

3年前 评论

亲测并不能实现....

2年前 评论

这种模式有点问题,有些场合不严谨!

比如,你这个例子里,存在这种问题: 假设删除完用户,因为某种原因(停电了,服务器挂了),导致后续删除用户文章的SQL并没有执行或失败,那这些文章在系统里就变成了孤魂野鬼,无主文章。 就得需要另一种机制,比如一个月清理查找一次无主文章。

如果用 数据库事务,那只能在控制器里 DB::transaction 包裹2条删除语句。

另一种场景: 比如要记录变更了什么。 比如一个帖子标题,假设审计用。 需要记录原标题和新标题都是什么,这种用observer就更有问题了,在监听update事件的时候,如果只有一边记录了。就会导致log表里有一条变更了帖子标题的记录,但实际帖子标题没有变更。或帖子标题改了,但log审计表里没有记录(看是 updating还是updated),哎,看来这些场景不适合此模式。

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!