繁体   English   中英

Graphql查询为关系文档返回null,查询中缺少字段但存在于primsa admin中

[英]Graphql query returning null for relational document, field missing from query but present in primsa admin

当我在prisma admin中查看文档时,我看到一个location字段,但是当我对此数据库运行查询时,这些值在前端始终为null,而解析程序根本不会返回。

我看过为什么GraphQL查询返回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
    }
  }
}

根据在操场上返回的值,我无法通过简单的嵌套查询从数据库中获取该位置。 我尝试使用以下解析器(后端查询),但是对于m.location始终为null

async missions (parent, args, ctx, info) {
    const missions = await ctx.db.query.missions()
    return Promise.all(missions.map(async m => {
      if (m.location) {
        const location = await ctx.db.query.location({where: { id: m.location.id }})
        return Object.assign(m, { location })
      } else return m
    }));
  },

但是从prisma管理员: pyramida管理员屏幕截图

哇,不真实,所以我唯一要做的就是将info传递给查询...

async missions (parent, args, ctx, info) {
    const missions = await ctx.db.query.missions({}, info)
    return missions
  }

我想要的所有数据现在都传递给了客户端,信息显然具有处理该关系所需的详细信息,老兄! 2天后大声笑。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM