如何使用Hasura构建含用户封禁状态判断的GraphQL关联查询?
实现方法
这里有两种简洁的方式在Hasura Server中实现你需要的功能:
方法一:直接通过关联查询生成状态字段
首先确保你已经在Hasura控制台给users和users_ban表建立了左外关联(关联条件设为users.id = users_ban.user_id,关联名称可设为user_ban)。
之后可以用两种方式生成布尔状态:
- 通过判断关联数据是否存在
query GetUsersWithBanStatus { users { id email is_banned: user_ban { id } } }
返回结果中,is_banned不为空则表示用户被封禁,为空则未封禁。
- 用Hasura内置的
_exists操作直接返回布尔值
query GetUsersWithBanStatus { users { id email is_banned: _exists( table: users_ban where: { user_id: { _eq: id } } ) } }
这个查询会直接返回is_banned布尔值,和你给出的SQL逻辑完全一致。
方法二:创建计算字段(推荐,逻辑固化复用)
如果希望把封禁判断逻辑固化为users表的专属字段,方便后续复用,可以创建计算字段:
- 进入Hasura控制台,找到
users表,切换到「计算字段」标签页 - 点击「添加计算字段」,名称设为
is_banned,返回类型选择Boolean - 在SQL定义框中填入:
case when exists (select 1 from users_ban where users_ban.user_id = users.id) then true else false end
- 保存后,就能直接在GraphQL查询中调用这个字段:
query GetUsersWithBanStatus { users { id email is_banned } }
这种方式完全匹配你原有的SQL逻辑,且无需每次查询重复编写判断规则。
内容的提问来源于stack exchange,提问作者v-ampire
相关产品推荐
相关产品推荐

