Observer 如何配合数据库事务使用
环境: laravel 8.5
经典场景需求,删除用户,同时删除用户发布的文章。
1, 控制器里删除用户
public function destroy(User $user) {
$user->delete();
}
2, observer 里删除用户发布的文章之类
public function deleted(User $user) {
// 删除用户的文章
}
但,有个问题。 如果删除完用户,刚好数据库挂了,导致用户发布的文章并没有被删除。 那么,这些文章在系统里就变成了孤魂野鬼,无主文章。就需要定期查找清理来应对。
在比如一种更严谨的场合,需要审计修改记录。用户发布了一个帖子,修改了标题。 审计 log 需要记录原标题是啥,新标题是啥。 这种用 observer 也是同样问题。 如果控制器里 update 完了,而 observer 里没有执行,就会发生用户改了标题而审计 log 没有记录的大问题。
那是不是这种需要数据库事务的场景,就不适合 observer? 只能直接在控制器里
DB::transaction {
// 删除用户
// 删除文章
}
推荐文章: