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

查询未收藏对应帖子却点赞其评论的用户ID问题求助

问题分析与解决方案

你的查询存在两个核心问题:

  • 表关联顺序错误,导致comments表的数据无法正确关联到bookmarks表
  • 未关联bookmarks与likes的user_id,导致你过滤的是所有用户都没收藏该帖子的情况,而非点赞的用户自身没收藏该帖子

另外,你的需求是针对「某特定帖子」,所以还需添加目标帖子ID的过滤条件。

正确的Laravel查询构建器代码

$targetPostId = 1; // 替换为你要查询的特定帖子ID

Like::join('comments', 'likes.comment_id', '=', 'comments.id')
    ->where('comments.post_id', $targetPostId)
    ->leftJoin('bookmarks', function ($join) use ($targetPostId) {
        $join->on('bookmarks.user_id', '=', 'likes.user_id')
             ->where('bookmarks.post_id', $targetPostId);
    })
    ->whereNull('bookmarks.id') // 用主键判断收藏记录是否存在更可靠
    ->distinct() // 去重,避免同一用户多次点赞导致重复ID
    ->pluck('likes.user_id');

对应的SQL语句

SELECT DISTINCT likes.user_id
FROM likes
JOIN comments ON likes.comment_id = comments.id
LEFT JOIN bookmarks ON bookmarks.user_id = likes.user_id AND bookmarks.post_id = 1
WHERE comments.post_id = 1 AND bookmarks.id IS NULL;

关键修正点说明

  1. 调整关联顺序:先通过JOIN关联comments,确保只保留点赞了目标帖子下评论的有效记录
  2. 关联用户维度:在关联bookmarks时同时绑定user_id和post_id,精准检查点赞用户自身是否收藏了该帖子
  3. 锁定特定帖子:添加comments.post_id = 目标ID条件,聚焦到你要查询的帖子范围
  4. 去重处理:用distinct()避免同一用户多次点赞该帖子下评论,导致返回重复的用户ID
  5. 可靠判断收藏状态:用bookmarks.id IS NULL代替post_id,主键的非空约束能更准确判断是否存在收藏记录

内容的提问来源于stack exchange,提问作者Yemi A

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 01:35:00