我对graphql和AWS Amplify都是新手,所以请原谅所有无知:)
我有一个像这样的graphql模式:
type Location @model @auth(rules: [{allow: owner}]){
street: String
city: String
state: String
zip: String
}
type Trip @model @auth(rules: [{allow: owner}]){
id: String!
...
location: Location
}
我正在尝试通过这样的变异请求同时创建位置和行程:
mutation {
createTrip(input: {
id: "someIdentifier",
location: {
street: "somewhere"
}
}) {
id
location {
street
}
}
}
但是我遇到这样的错误:
{
"data": null,
"errors": [
{
"path": null,
"locations": [
{
"line": 2,
"column": 21,
"sourceName": null
}
],
"message": "Validation error of type WrongType: argument 'input' with value '...' contains a field not in 'CreateTripInput': 'location' @ 'createTrip'"
}
]
}
检查生成的schema.graphql
文件,我发现输入模型上确实没有location
对象:
input CreateTripInput {
id: String!
...
}
如何进行放大以生成正确的输入模式,以便可以同时创建Trip和location对象?
答案 0 :(得分:0)
我能够从aws-amplify团队here获得答案。总结一下:
行程和位置都具有model
指令。没有@connection指令将Trip和Location连接起来。 “解决”的两个选项是:
如果您希望模型位于2个单独的表中并且希望能够基于位置查询Trip,则更新连接模型的架构。但是,使用2个单独的表将无法在单个突变中同时创建Trip和Location。例如:
type Location @model @auth(rules: [{allow: owner}]){
street: String
city: String
state: String
zip: String
trips: Trip @connection(name:"TripLocation")
}
type Trip @model @auth(rules: [{allow: owner}]){
id: String!
location: Location @connection(name:"TripLocation")
}
第二个选项,如果位置数据是特定于行程的,并且您不想创建单独的表,则从位置类型中删除@model指令。这样做可以使您将位置创建为同一突变的一部分。
type Location {
street: String
city: String
state: String
zip: String
}
type Trip @model @auth(rules: [{allow: owner}]){
id: String!
location: Location
}
后来是我向前迈进的解决方案。