Laravel查询问题:删除to_user_id后total_like未归零
问题解决方法
你的问题在于当前查询未检查to_user_id对应的用户是否被删除,导致该用户删除后点赞记录仍被统计。以下是两种可行的修改方案:
方案一:关联被点赞用户表并条件统计
关联被点赞的用户表,统计时仅计算未被删除用户对应的点赞记录:
$user_id = 585; $list = new self; $list = $list->where('users.id', $user_id); // 关联点赞记录表,再关联被点赞的用户表 $list = $list->leftJoin('user_like_dislikes as total_like', function ($join) { $join->on('users.id', '=', 'total_like.to_user_id') ->where('total_like.like', 1); })->leftJoin('users as liked_users', 'total_like.to_user_id', '=', 'liked_users.id'); // 过滤已删除用户的点赞后再统计 $list = $list->select('users.*', \DB::raw('count(case when liked_users.deleted_at is null then total_like.like else null end) as total_like')) ->first();
方案二:关联点赞表时直接过滤未删除用户
通过子查询在关联点赞记录时,直接排除已删除用户的点赞数据:
$user_id = 585; $list = new self; $list = $list->where('users.id', $user_id); $list = $list->leftJoin('user_like_dislikes as total_like', function ($join) { $join->on('users.id', '=', 'total_like.to_user_id') ->where('total_like.like', 1) // 仅保留被点赞用户未删除的记录 ->whereExists(function ($query) { $query->select(\DB::raw(1)) ->from('users') ->whereRaw('users.id = total_like.to_user_id') ->whereNull('users.deleted_at'); }); }); $list = $list->select('users.*', \DB::raw('count(total_like.like) as total_like')) ->first();
注意事项
- 原代码中
select语句缺少闭合括号,已在修改后的代码中补全 - 原代码的
use ($user)属于笔误,已移除(若有其他业务需求可自行调整)
内容的提问来源于stack exchange,提问作者tacec48943
相关产品推荐
相关产品推荐

