GraphQL查询如何正确传递变量,使用_ilike匹配角色获取用户消息
问题原因
- 你的GraphQL查询没有声明角色匹配所需的
$userRole变量,仅声明了$userId,组件侧传递的嵌套参数不会被查询识别生效 - 查询中
_ilike的匹配值硬写为固定的%,没有绑定动态变量,无法按当前用户角色过滤 - 组件传递变量的写法错误,不需要嵌套
message.roles._ilike的结构,直接传入与查询定义对应的扁平化变量即可
修复后的查询语句
query getUserMessages($userId: String!, $userRole: String!) { messageReceivers( where: { _or: [{ userId: { _eq: $userId } }, { message: { roles: { _ilike: $userRole } } }] } ) { messageId userId message { id audioLink body videoLink user { firstName lastName photo title specialty profession location } } } }
修复后的组件代码
const [getUserMessages, { error, called, loading, data }] = useGetUserMessagesLazyQuery() useEffect(() => { // 边界判断避免用户信息未加载时发起无效请求 if (!user?.id || !user?.role) return const userRole = `%${user.role}%` getUserMessages({ variables: { userId: user.id, userRole: userRole }, }) }, [user])
额外优化提示
如果你的roles字段是PostgreSQL数组类型,不要使用_ilike匹配,改用_contains/_arrays_overlap操作符更准确,此时不需要加%通配符,直接传入角色原值即可,对应where条件写法为:
{ message: { roles: { _contains: [$userRole] } } }
内容的提问来源于stack exchange,提问作者kinzito17
相关产品推荐
相关产品推荐

