Laravel 4.2在观察者中级联软删除

时间:2015-02-26 12:19:32

标签: laravel laravel-4 observers

我在Laravel 4.2中有3个相关的表格/模型:

  • 用户
  • 帖子
  • 标签

用户拥有在多态查找表中标记的帖子。

用户和帖子都实现了软删除,我正在使用Observer尝试级联删除用户事件以软删除用户帖子。

所以我的UserObserver有:

public function deleted($user){
    // Soft delete their posts 
    \Log::info('Soft-deleting user posts');
    $user->posts()->delete();
}

我的PostObserver删除方法有:

public function deleted($post){
    // De-tag the post
    \Log::info('Detaching tags from post');
    $post->tags()->detach();
}

我的问题是,删除用户成功删除帖子时,不会触发PostObserver删除方法,因此标签不会分离。

1 个答案:

答案 0 :(得分:2)

$user->posts()->delete();不会触发任何模型事件。它只会对关系运行DELETE查询。对于像模型事件这样的Eloquent功能,您必须使用循环逐个删除它们:

$user->posts->each(function($post){
    $post->delete();
});