当我在pyramida admin中查看文档时,我看到一个location
字段,但是当我对该数据库运行查询时,这些值在前端始终为null,而解析程序根本不会返回。 / p>
我看过Why does a GraphQL query return null?,但根据我的判断,这些情况都没有匹配或提及根本问题。
我一直在试图使本文有意义,但是却无法实现这样一个结构,使我可以组成一个实际触发的查询: https://www.prisma.io/tutorials/a-guide-to-common-resolver-patterns-ct08/
该设置符合Web Bos高级反应过程,如下所示:
创建React应用-> Apollo客户端-> Yoga服务器-> Prisma服务器(sql)
我反复使用输入类型,将解析器简化到最低限度,仅查询单个文档而不是文档数组。我不希望使用的选项是使用Json标量类型,并跳过嵌套结构,而改用扁平结构。
前端:
const CREATE_MISSION = gql`
mutation CREATE_MISSION($title: String!, $description: String!, $bounty: Int!, $image: String, $postedBy: String!, $location: LocationInput) {
createMission(title: $title, description: $description, bounty: $bounty, image: $image, postedBy: $postedBy, location: $location) {
id
title
bounty
image
description
postedBy
location {
id
lat
lng
}
}
}
`;
schema.graphql:
input LocationInput {
lat: Float!
lng: Float!
}
type Mutation {
createMission(
title: String!,
description: String!,
bounty: Int!,
image: String,
postedBy: String!,
location: LocationInput
): Mission!
}
datamodel.graphql:
type Location {
id: ID! @id
lat: Float!
lng: Float!
}
type Mission {
id: ID! @id
title: String!
description: String!
bounty: Int!
image: String
postedBy: String!
location: Location @relation(name: "MissionStart")
end: Location @relation(name: "MissionEnd")
dispatcher: User @relation(name: "Dispatcher")
activeUser: User @relation(name: "Active")
appliedUsers: [User] @relation(name: "Applicants")
}
Mutations.js
async createMission (parent, args, ctx, info) {
console.log(`Create Mission server side`)
// let { input } = args
console.dir(args)
const mission = await ctx.db.mutation.createMission({
data: {
...args,
dispatcher: {
connect: {
id: args.postedBy
},
},
location: {
create: {
lat: args.location.lat,
lng: args.location.lng
}
}
},
}, info);
return mission
},
游乐场查询:
{
mission (id:"someid") {
title
description
location {
lat
}
}
location(id:"id_asPerTheDB ") {
lat
}
}
返回:
{
"data": {
"mission": {
"title": "Take me the airport",
"description": "so I can fly",
"location": null
},
"location": {
"lat": 30.2255867
}
}
}
根据在运动场中返回的值,我无法通过简单的嵌套查询从数据库中获取该位置。我尝试使用以下解析器(后端查询),但是它始终将null
的{{1}}
m.location
答案 0 :(得分:0)
哇,不真实,所以我唯一要做的就是将info
传递给查询...
async missions (parent, args, ctx, info) {
const missions = await ctx.db.query.missions({}, info)
return missions
}
我想要的所有数据现在都传递给了客户端,信息显然具有处理该关系所需的详细信息,老兄! 2天后,大声笑。