如何使用 GraphQL 上的自定义字段查询?

Posted

技术标签:

【中文标题】如何使用 GraphQL 上的自定义字段查询?【英文标题】:How to use the query for custom fields on GraphQL? 【发布时间】:2019-06-12 08:26:39 【问题描述】:

我的 graphcool 上有这个架构:

type User @model 
  id: ID! @isUnique
  name: String!
  email: String!
  password: String!

使用 Playground,我可以正确执行:

query 
  User(id: "1234") 
    id
    name
  

但是这个查询:

query 
  User(name: "Thomas") 
    id
    name
  

抛出错误:

“查询”类型的字段“用户”上的未知参数“名称”。 (第 2 行, 第 8 栏): 用户(姓名:“Thomas”)。

为什么?以及如何解决这个问题?从我的观点来看,模型上已经存在的任何东西都可以立即查询,对吗?顺便说一句,我是graphQL的新手,几乎没有文章谈论这个错误(每个教程都假设这会立即起作用),所以如果有必要请给出更详细的答案。

【问题讨论】:

【参考方案1】:

GraphQL 本质上不允许对对象进行任意查询。

在你的架构中的某个地方会有一个额外的声明,比如

type Query 
  User(id: ID!): User

Query 类型中的名称是您可以运行的***查询,并且该查询中列出的参数是它们接受的唯一 参数。 (顶层突变有对应的Mutation类型,可以改变底层状态,在查询中使用mutation关键字。)

如果您控制服务器实现,则可以添加参数或额外的***查询

userByName(name: String!): User

但您还必须提供此查询的实现或处理附加参数,这是代码更改。

【讨论】:

OOOOOH 好的。是的,我记得我在某个地方(不在教程中)看到了type Query,但我不知道那是为了什么。天哪,我不知道为什么这不在基本教程中。关于服务器实现,你能给我指出一个关于这个服务器实现的教程吗?我确实控制了服务器实现,但我根本不知道如何实现服务器实现。顺便说一句,我是否需要添加extend 使其变为extend type Query,或者不需要?我读的一些代码有extend 从更彻底的教程阅读中,我上面问的实际上是高级的,“自定义查询”。 graphcool提供的简单查询API实际上已经提供了很多基础查询,如果我不准备编写自己的自定义查询,我不应该使用这种。这就是为什么我很惊讶 graphql 能够神奇地解释我要搜索名为“Thomas”的用户,并且不少于或多于或不包含“Thomas”。事实证明,事实并非如此。对于我的情况,我可以使用filter 来搜索具有特定名称的用户。

以上是关于如何使用 GraphQL 上的自定义字段查询?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 GraphQL 查询 Wordpress 关系字段?

带有 Java/Spring Boot 的 GraphQL 无法从传递的查询中选择定义为在模式中的字段上定义的自定义指令

通过存档页面上的自定义字段查询自定义帖子类型

GraphQL Schema 上的计算字段或使用 Apollo 客户端查询

如何在 graphQL 片段中定义可选字段以进行查询

无法查询类型 Query 上的字段注册