【问题标题】:Amplify GraphQL get item from other field than ID放大 GraphQL 从 ID 以外的其他字段获取项目
【发布时间】:2021-07-29 11:40:31
【问题描述】:

我正在使用 React 和 AWS Amplify 实现一个网页。

我的schema.graphql 文件中有以下定义:

type Calendar @model {
  id: ID!
  name: String
  description: String
  url: String!
  intervals: [Interval] @connection(keyName: "byCalendar", fields: ["id"])
}

我想从其 URL 字符串中获取日历。不幸的是,下面的代码抛出了一个错误:

import { API, graphqlOperation } from "aws-amplify";
import * as queries from "../../graphql/queries";

await API.graphql(graphqlOperation(queries.getCalendar, { url: "some-url"}));

Variable "$id" of required type "ID!" was not provided.

从错误中,提供 id 是强制性的。但是,我希望能够仅从 url 获取对象。

我该怎么做?

我正在使用放大的 cli 自动生成的查询。

/* eslint-disable */
// this is an auto generated file. This will be overwritten

export const getCalendar = /* GraphQL */ `
  query GetCalendar($id: ID!) {
    getCalendar(id: $id) {
      id
      name
      description
      url
      intervals {
        nextToken
      }
      createdAt
      updatedAt
    }
  }
`;
export const listCalendars = /* GraphQL */ `
  query ListCalendars(
    $filter: ModelCalendarFilterInput
    $limit: Int
    $nextToken: String
  ) {
    listCalendars(filter: $filter, limit: $limit, nextToken: $nextToken) {
      items {
        id
        name
        description
        url
        createdAt
        updatedAt
      }
      nextToken
    }
  }
`;

【问题讨论】:

    标签: reactjs graphql aws-amplify


    【解决方案1】:

    找到了解决办法。我必须像这样向模型添加一个“byURL”键:

    type Calendar @model @key(name: "byURL", fields: ["url", "id"], queryField: "calendarByURL") {
        id: ID!
        name: String
        description: String
        url: String
        intervals: [Interval] @connection(keyName: "byCalendar", fields: ["id"])
    }
    

    然后使用该新键编写自定义查询(或根据更新的 schema.graphql 文件进行放大以重新生成查询):

    export const getCalendarByURL = /* GraphQL */ `
        query calendarByURL($url: String!) {
            calendarByURL(url: $url) {
                items {
                    id
                    name
                    description
                    url
                    intervals {
                        nextToken
                    }
                    createdAt
                    updatedAt
                }
            }
        }
    `;
    

    这会让我做:

    await API.graphql(graphqlOperation(customQueries.getCalendarByURL, { url: "some-url"}));
    

    【讨论】:

      猜你喜欢
      • 2023-02-12
      • 2020-02-22
      • 1970-01-01
      • 1970-01-01
      • 2018-01-09
      • 2014-06-02
      • 1970-01-01
      • 1970-01-01
      • 2013-07-20
      相关资源
      最近更新 更多