Когда я пытаюсь вернуть поля из отношения «один ко многим» на клиентской площадке Prisma, он возвращает следующую ошибку:
Cannot return null for non-nullable field DeviceConfig.device.
Что в моем резолвере или клиенте могло быть причиной этого?
При выполнении следующего запроса на серверной площадке Prisma API он возвращает правильные данные, которые говорят мне, что мои мутации и отношения хорошие.
Модель данных
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"
]
}
]
}
Я ожидаю, что запрос вернет модель устройства, как это делает сервер API Prisma. Запрос
{
deviceConfig(where:{id:"cjqigyian00ef0d206tg116k5"}){
name
id
device{
id
model
}
}
}
Результат
{
"data": {
"deviceConfig": {
"name": "Standard",
"id": "cjqigyian00ef0d206tg116k5",
"device": {
"id": "cjqigxzs600e60d20sdw38x7p",
"model": "7530"
}
}
}
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я думаю, вы смешиваете синтаксис Наручники призмы с синтаксисом Клиент Prisma.
Объект info - это то, что вы передаете привязкам, чтобы вернуть то, что запрашивает пользователь. Однако эта функция недоступна в Prisma Client, которым вы, похоже, пользуетесь. Если вам нужна эта функция, вы можете попробовать Prisma Bindings.
В противном случае измените свой код на что-то вроде context.prisma.deviceConfig({ id }).device(). Думаю, он тоже может принять фрагмент context.prisma.deviceConfig({ id }).$fragment('fragment configWithDevice on DeviceConfig { id name device { id model } }').
Похоже, что первый синтаксис возвращает только «device by deviceConfig» (например, сообщения пользователя), но не саму конфигурацию устройства. Возможно, синтаксис фрагмента - единственная возможность: /
В этом есть смысл, спасибо за помощь.
Это сообщение на форуме помогло мне понять некоторые предостережения, связанные с клиентом 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,
},
};
Правильно, я перехожу с привязки Prisma и пропустил эту деталь. Я попробовал
context.prisma.deviceConfig({ id }).device()и получил следующую ошибку:Cannot return null for non-nullable field DeviceConfig.name.. Было бы неплохо заставить это работать, чтобы мне не пришлось использовать решение для фрагментов. Но фрагмент сработал! Есть ли способ запросить все поля, не заполняя фрагмент всеми полями?