Prisma API returns 关系但客户端 returns "cannot return null for non-nullable field.."
Prisma API returns relation but client returns "cannot return null for non-nullable field.."
当我尝试 return 来自 Prisma 客户端 playground 中一对多关系的字段时,return出现以下错误:
Cannot return null for non-nullable field DeviceConfig.device.
我的解析器或客户端中的什么可能导致此问题?
当 运行 在后端 Prisma API playground 上进行以下查询时,它会 return 正确的数据,因此告诉我我的突变和关系很好。
数据模型
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 服务器那样查询 return 设备型号
查询
{
deviceConfig(where:{id:"cjqigyian00ef0d206tg116k5"}){
name
id
device{
id
model
}
}
}
结果
{
"data": {
"deviceConfig": {
"name": "Standard",
"id": "cjqigyian00ef0d206tg116k5",
"device": {
"id": "cjqigxzs600e60d20sdw38x7p",
"model": "7530"
}
}
}
}
我认为您在混合 Prisma Bindings syntax with Prisma Client 语法。
info
对象是您传递给 return 用户要求的绑定的对象。但是,此功能在您似乎正在使用的 Prisma Client 中不可用。如果您需要该功能,那么您可以尝试 Prisma Bindings。
否则,请将您的代码修改为 context.prisma.deviceConfig({ id }).device()
之类的内容。我认为它也可以接受片段 context.prisma.deviceConfig({ id }).$fragment('fragment configWithDevice on DeviceConfig { id name device { id model } }')
.
这个论坛 post 帮助我了解了有关解析器的 Prisma 客户端的一些注意事项。 Help Understanding Prisma Client’s Value Proposition
在我的例子中,我遗漏了以下左轮手枪,因为我认为它们会根据模式关系隐含。
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,
},
};
当我尝试 return 来自 Prisma 客户端 playground 中一对多关系的字段时,return出现以下错误:
Cannot return null for non-nullable field DeviceConfig.device.
我的解析器或客户端中的什么可能导致此问题?
当 运行 在后端 Prisma API playground 上进行以下查询时,它会 return 正确的数据,因此告诉我我的突变和关系很好。
数据模型
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 服务器那样查询 return 设备型号 查询
{
deviceConfig(where:{id:"cjqigyian00ef0d206tg116k5"}){
name
id
device{
id
model
}
}
}
结果
{
"data": {
"deviceConfig": {
"name": "Standard",
"id": "cjqigyian00ef0d206tg116k5",
"device": {
"id": "cjqigxzs600e60d20sdw38x7p",
"model": "7530"
}
}
}
}
我认为您在混合 Prisma Bindings syntax with Prisma Client 语法。
info
对象是您传递给 return 用户要求的绑定的对象。但是,此功能在您似乎正在使用的 Prisma Client 中不可用。如果您需要该功能,那么您可以尝试 Prisma Bindings。
否则,请将您的代码修改为 context.prisma.deviceConfig({ id }).device()
之类的内容。我认为它也可以接受片段 context.prisma.deviceConfig({ id }).$fragment('fragment configWithDevice on DeviceConfig { id name device { id model } }')
.
这个论坛 post 帮助我了解了有关解析器的 Prisma 客户端的一些注意事项。 Help Understanding Prisma Client’s Value Proposition
在我的例子中,我遗漏了以下左轮手枪,因为我认为它们会根据模式关系隐含。
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,
},
};