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

使用Bookshelf.js与Knex.js查询好友表中待处理单向好友请求

实现方案

核心逻辑

待处理好友请求的本质是仅存在单向关联记录,没有对应的反向记录。我们可以通过左连接匹配反向记录,再筛选关联结果为空的条目实现需求。

代码实现

场景1:查询当前用户收到的待处理请求(他人发给我的申请)

const friends = new Friends();
return friends.query((qb) => {
    qb.select('friends.user_id', 'friends.friend_id');
    // 左连接匹配双向对应的反向好友记录
    qb.leftJoin('friends as friendsTwo', function() {
        this.on('friends.user_id', '=', 'friendsTwo.friend_id')
            .andOn('friends.friend_id', '=', 'friendsTwo.user_id');
    });
    // 仅保留没有反向记录的单向条目,也就是待处理请求
    qb.whereNull('friendsTwo.id');
    // 筛选当前用户作为被申请人的记录,即收到的请求
    qb.where('friends.friend_id', '=', id);
}).fetchAll();

场景2:查询当前用户发出的待处理请求(我发给他人的未处理申请)

仅需把上述代码的where条件替换为:

qb.where('friends.user_id', '=', id);

常见问题说明

之前左连接不生效通常是因为关联条件只配置了单字段匹配,没有同时绑定两个字段的双向对应关系,导致关联结果出错。


内容的提问来源于stack exchange,提问作者k.apps1999

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:06:04