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();
});
}
}
这样我们在删除用户的同时,与之有关系的文章数据也会被删除。
各位大佬,有时间可以在群里接下外包,单子很多!
本作品采用《CC 协议》,转载必须注明作者和本文链接
这样写是可以删除掉用户下的文章,但是文章如果有评论,就尴尬了,不能连带删除
用模型观察 更香
mysql 设置外键级联删除就可以了
亲测并不能实现....
这种模式有点问题,有些场合不严谨!
比如,你这个例子里,存在这种问题: 假设删除完用户,因为某种原因(停电了,服务器挂了),导致后续删除用户文章的SQL并没有执行或失败,那这些文章在系统里就变成了孤魂野鬼,无主文章。 就得需要另一种机制,比如一个月清理查找一次无主文章。
如果用 数据库事务,那只能在控制器里 DB::transaction 包裹2条删除语句。
另一种场景: 比如要记录变更了什么。 比如一个帖子标题,假设审计用。 需要记录原标题和新标题都是什么,这种用observer就更有问题了,在监听update事件的时候,如果只有一边记录了。就会导致log表里有一条变更了帖子标题的记录,但实际帖子标题没有变更。或帖子标题改了,但log审计表里没有记录(看是 updating还是updated),哎,看来这些场景不适合此模式。