Как я могу получить данные из GraphQL в моем преобразователе - PullRequest
1 голос
/ 11 июля 2019

В моем средстве распознавания я не могу получить подключенные данные

это работает на детской площадке graphql (призма), но я не уверен в синтаксисе о том, как сформировать распознаватель на сервере apollo

// my typedef for activity is

type Activity {
    id: ID! @id
    ActivityType: ActivityType!
    title: String!
    date: DateTime
    user: User!
    distance: Float!
    distance_unit: Unit!
    duration: Float!
    elevation: Float
    elevation_unit: Unit
    createdAt: DateTime! @createdAt
    updatedAt: DateTime! @updatedAt

// and my resolver currently looks like this

async activity(parent, args, ctx, info) {
        const foundActivity = await ctx.db.query.activity({
            where: {
                id: args.id
            }
        });
        // todo fetch user data from query
        console.log(foundActivity);
    }

// where db has been placed onto the ctx (context)
// the CL gives all of the data for Activity apart from the user

// in the playground I would do something like this

query activity {
  activity(where: {
    id: "cjxxow7c8si4o0b5314f9ibek"
  }){
    title
    user {
      id
      name
    }
  }
}

// but I do not know how to specify what is returned in my resolver.

console.log(foundActivity) gives:

{ id: 'cjxxpuh1bsq750b53psd2c77d',
  ActivityType: 'CYCLING',
  title: 'Test Activity',
  date: '2019-07-10T20:21:27.681Z',
  distance: 13.4,
  distance_unit: 'KM',
  duration: 90030,
  elevation: 930,
  elevation_unit: 'METERS',
  createdAt: '2019-07-10T20:48:50.879Z',
  updatedAt: '2019-07-10T20:48:50.879Z' }

Prisma - это БД ORM, а затем у меня работает сервер Apollo-Server 2. К сожалению, переполнение стека также думает, что в этом посте слишком много кода, поэтому мне придется размышлять о несущественном тарабарстве из-за того, что их система не может его обработать.

Ответы [ 2 ]

1 голос
/ 11 июля 2019

Вам нужно будет внедрить распознаватель для Activity.user.К сожалению, ваша сущность не содержит ссылки на пользователя.Сначала добавьте пользовательское соединение в вашу модель данных Prisma.Затем внедрите преобразователь для Activity.user.Я не очень знаком с Prisma 1, но эта наивная реализация уже должна делать то, что вы хотите:

let resolvers = {
  Query: {
    // ...
  },
  Activity: {
    user(parent, args, ctx) {
      return ctx.db.query.activity({ id: parent.id }).user();
    }
  }
}

Узнайте больше о разрешении отношений в Prisma здесь

0 голосов
/ 12 июля 2019

Таким образом, ответ был невероятно прост: я просто добавил второй аргумент к запросу (после «где» с тегом gql формы данных, которая должна быть возвращена, поэтому мой код теперь выглядит так:

const foundActivity = await ctx.db.query.activity(
        {
            where: {
                id: args.id
            }
        },
        `{id title user { id name }}`
    );
...