Supabase同表双关联查询评论用户资料报错的解决方法
问题背景
基于Supabase开发类Twitter的「回复@用户」评论功能,评论表Comments共设两个关联profiles表用户主键的外键字段:
userid:评论发布者用户IDreplyingTo:被回复用户ID
单外键关联查询用户资料可正常执行,同时拉取评论发布者、被回复用户两份资料时触发报错:
Could not embed because more than one relationship was found for 'Comments' and 'profiles'
触发报错的问题代码:
const { data, error } = await supabase .from('Comments') .select('ReplyingTo, profiles:profiles(id), profiles:profiles(id)') .eq('commentid', cmtid)
预期返回结果:指定评论内容、评论发布者个人资料、被回复用户个人资料。
附数据库ERD示意图:
报错根因
Supabase自动关系检测无法自动识别同一张表上的多个外键映射关系,查询时重复使用profiles作为关联别名,且未指定每个关联对应的外键字段,导致关系匹配冲突。
正确查询写法
给两个关联配置不同的自定义别名,通过!外键字段名显式声明每个关联对应的外键映射即可:
const { data, error } = await supabase .from('Comments') .select(` *, comment_author:profiles!userid(id, username, avatar), replied_user:profiles!replyingTo(id, username, avatar) `) .eq('commentid', cmtid)
注意事项
comment_author、replied_user为自定义别名,可按需调整,只需保证两个别名不重复即可!后拼接的字段名必须和Comments表实际的外键字段名完全一致,注意匹配字段大小写- 关联语句后括号内填写需要拉取的
profiles表字段即可,支持按需增删用户名、头像、个人简介等字段
内容的提问来源于stack exchange,提问作者Kentrell Jr
相关产品推荐
相关产品推荐

