Prisma API возвращает отношение, но клиент возвращает «не может вернуть ноль для ненулевого поля ..» - PullRequest
0 голосов
/ 05 января 2019

Когда я пытаюсь вернуть поля из отношения «один ко многим» в игровой площадке клиента Prisma, возвращается следующая ошибка:

Невозможно вернуть ноль для ненулевого поля DeviceConfig.device.

Что в моем резольвере или клиенте может быть причиной этого?

При выполнении следующего запроса на бэкэнд-площадке Prisma API он возвращает правильные данные, что говорит о хороших моих мутациях и отношениях.

DataModel

type Device {
  ...
  model: String! @unique
  ...
  configs: [DeviceConfig] @relation(name: "DeviceConfigs", onDelete: CASCADE)
}

type DeviceConfig {
  id: ID! @unique
  device: Device! @relation(name: "DeviceConfigs", onDelete: SET_NULL)
  name: String!
  ...
}

Резольвер

deviceConfig: async (parent, { id }, context, info) => context.prisma.deviceConfig({ id }, info)

Запрос

{
  deviceConfig(id:"cjqigyian00ef0d206tg116k5"){
    name
    id
    device{
      model
    }
  }
}

Результат

{
  "data": null,
  "errors": [
    {
      "message": "Cannot return null for non-nullable field DeviceConfig.device.",
      "locations": [
        {
          "line": 5,
          "column": 5
        }
      ],
      "path": [
        "deviceConfig",
        "device"
      ]
    }
  ]
}

Я ожидаю, что запрос вернет модель устройства, как это делает внутренний сервер Prisma API. Запрос

{
  deviceConfig(where:{id:"cjqigyian00ef0d206tg116k5"}){
    name
    id
    device{
      id
      model
    }
  }
}

Результат

{
  "data": {
    "deviceConfig": {
      "name": "Standard",
      "id": "cjqigyian00ef0d206tg116k5",
      "device": {
        "id": "cjqigxzs600e60d20sdw38x7p",
        "model": "7530"
      }
    }
  }
}

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Это сообщение на форуме помогло мне понять некоторые предостережения относительно клиента Prisma, когда дело доходит до распознавателей. Помощь в понимании ценностного предложения клиента Prisma

В моем случае мне не хватало следующих револьверов, потому что я думал, что они будут подразумеваться на основе отношения схемы.

const resolvers = {
  // Relationship resolvers
  Device: {
    configs: (parent, args, context) => context.prisma.device({ id: parent.id }).configs(),
  },
  DeviceConfig: {
    device: (parent, args, context) => context.prisma.deviceConfig({ id: parent.id }).device(),
  },
  Query: {
    ...User.Query,
    ...Device.Query,
    ...DeviceConfig.Query,
  },
  Mutation: {
    ...User.Mutation,
    ...Device.Mutation,
    ...DeviceConfig.Mutation,
  },
};
0 голосов
/ 05 января 2019

Я думаю, что вы смешиваете Присматические привязки синтаксис с Prisma Client синтаксис.

Объект info - это то, что вы передаете в привязки, чтобы вернуть то, что запрашивает пользователь. Однако эта функция недоступна в клиенте Prisma, который вы, похоже, используете. Если вам нужна эта функция, вы можете попробовать Prisma Bindings.

В противном случае измените ваш код на что-то вроде context.prisma.deviceConfig({ id }).device(). Я думаю, что это также может принять фрагмент context.prisma.deviceConfig({ id }).$fragment('fragment configWithDevice on DeviceConfig { id name device { id model } }').

...