【问题标题】:How to use the query for custom fields on GraphQL?如何使用 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的新手,几乎没有文章谈论这个错误(每个教程都假设这会立即起作用),所以如果有必要请给出更详细的答案。

【问题讨论】:

    标签: 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 来搜索具有特定名称的用户。
    猜你喜欢
    • 2020-07-04
    • 2014-05-02
    • 1970-01-01
    • 2021-05-14
    • 2019-06-12
    • 2023-01-20
    • 2021-07-29
    • 2019-11-14
    • 2020-08-25
    相关资源
    最近更新 更多