首页 > 解决方案 > 如何在放大中添加 filterInput 字段?

问题描述

我得到了以下架构(schema.graphql),


type Admin @model @auth(rules: [{ allow:owner }]) {
    id: ID!
    name: String!
}

type Staff @model @auth(rules: [{ allow:owner }]) {
    id: ID!
    name: String!
    admin: Admin @connection
}

现在我想获取员工,按管理员 ID 过滤掉。但是当我跑

API.graphql(
graphqlOperation(queries.listStaffs,
    {
        filter: {
            admin: {
                eq: adminId
            }
        }
    } 
))

它在下面抛出一个错误。

The variables input contains a field name 'admin' that is not defined for input object type 'ModelStaffFilterInput'

由于没有过滤器输入字段admin。在 AppSync 控制台中,

input ModelStaffFilterInput {
    id: ModelIDInput
    name: ModelStringInput
    and: [ModelStaffFilterInput]
    or: [ModelStaffFilterInput]
    not: ModelStaffFilterInput
}

在这种情况下,如何将过滤器输入字段添加到 GraphQL 架构中?你能提供任何例子amplify/backend/api/pjname/shema.graphql吗?

标签: amazon-web-servicesaws-amplifyaws-appsync

解决方案


好的,我得到了这份工作。我所要做的就是明确地输入关系的关键。


type Admin @model @auth(rules: [{ allow:owner }]) {
    id: ID!
    name: String!
}

type Staff @model @auth(rules: [{ allow:owner }]) {
    id: ID!
    name: String!
    admin: Admin! @connection
    staffAdminId: ID! # this field is needed, for generating filterInput
}

然后amplify push,生成的架构staffAdminId

input ModelStaffFilterInput {
    staffAdminId: ModelIDInput
    id: ModelIDInput
    name: ModelStringInput
    and: [ModelStaffFilterInput]
    or: [ModelStaffFilterInput]
    not: ModelStaffFilterInput
}

并运行查询

listStaffs(filter: {staffAdminId: {eq: "adminID"}})

staffAdminId已经在表中,所以除了 graphql 模式之外它不会影响。

我从:

https://github.com/aws-amplify/amplify-cli/issues/300#issuecomment-475786380


推荐阅读