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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:45:03