我在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删除方法,因此标签不会分离。
答案 0 :(得分:2)
$user->posts()->delete();
不会触发任何模型事件。它只会对关系运行DELETE
查询。对于像模型事件这样的Eloquent功能,您必须使用循环逐个删除它们:
$user->posts->each(function($post){
$post->delete();
});