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

时间:2019-08-19 21:06:19

标签: javascript reactjs graphql prisma-graphql prisma-binding

当我在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

,但仍来自prisma管理员: prisma admin screenshot

1 个答案:

答案 0 :(得分:0)

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

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

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