You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 22:21:03