放大GraphQL从ID以外的其他字段获取项目 [英] Amplify GraphQL get item from other field than ID

查看:21
本文介绍了放大GraphQL从ID以外的其他字段获取项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Reaction和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获取对象。

我如何才能做到这一点?

我正在使用Amplify的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
    }
  }
`;

推荐答案

找到了解决方案。我必须按URL&q;键向模型添加一个键:

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"])
}
然后使用新键编写一个定制查询(或者让Amplify根据更新的schema.graph ql文件重新生成查询):
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"}));

这篇关于放大GraphQL从ID以外的其他字段获取项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆