使用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
相关产品推荐
相关产品推荐

