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

Supabase JS中关联双表时使用.or方法查询好友关系的问题

解决方法

原生SQL实现

你需要将user表分别以别名关联到friends表的sent和received字段,以此同时获取双方的用户信息:

SELECT 
    f.*,
    sender.*,
    receiver.*
FROM friends f
INNER JOIN user sender ON f.sent = sender.id
INNER JOIN user receiver ON f.received = receiver.id
WHERE 
    f.accepted = TRUE
    AND (f.sent = :current_user_id OR f.received = :current_user_id);

替换:current_user_id为当前用户的实际ID即可执行查询。

SQLAlchemy ORM实现

如果使用SQLAlchemy,需要给User模型创建两个别名,分别对应发送方和接收方,避免关联冲突:

from sqlalchemy.orm import aliased

# 定义User模型的两个别名,区分发送方和接收方
Sender = aliased(User)
Receiver = aliased(User)

current_user_id = 你的当前用户ID

# 构建查询语句
friend_records = db.session.query(Friends, Sender, Receiver)\
    .join(Sender, Friends.sent == Sender.id)\
    .join(Receiver, Friends.received == Receiver.id)\
    .filter(Friends.accepted == True)\
    .filter((Friends.sent == current_user_id) | (Friends.received == current_user_id))\
    .all()

# 遍历结果示例
for friend, sender, receiver in friend_records:
    # 访问发送方信息:sender.name、sender.email等
    # 访问接收方信息:receiver.name、receiver.email等
    # 访问好友关系信息:friend.accepted等
    pass

报错原因说明

之前直接用recieved(*)、sent(*)关联查询报错,是因为这两个字段都关联到user表,但没有明确区分是两个不同的关联实例,ORM无法识别对应的关联对象。通过给user表(或模型)设置别名,就能明确区分发送方和接收方的关联关系,解决冲突问题。

内容的提问来源于stack exchange,提问作者Deep Shetye

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 13:32:04