X0r*_*r0N 7 graphql prisma prisma-graphql
我想创建一个新的 graphql api,但我有一个正在努力解决的问题。
该代码是开源的,可以在以下位置找到: https: //github.com/glitr-io/glitr-api
我想创建一个突变来创建具有关系的记录...似乎该记录是使用所有预期的关系正确创建的(当直接检查到数据库时),但是该方法返回的值create<YourTableName>
缺少所有关系。
...所以我在 api 上收到错误,因为“无法为不可为空的字段 Meme.author 返回 null。”。我无法弄清楚我的代码中可能有什么问题。
解析器如下所示:
...
const newMeme = await ctx.prisma.createMeme({
author: {
connect: { id: userId },
},
memeItems: {
create: memeItems.map(({
type,
meta,
value,
style,
tags = []
}) => ({
type,
meta,
value,
style,
tags: {
create: tags.map(({ name = '' }) => (
{
name
}
))
}
}))
},
tags: {
create: tags.map(({ name = '' }) => (
{
name
}
))
}
});
console.log('newMeme', newMeme);
...
Run Code Online (Sandbox Code Playgroud)
newMeme
这里的值console.log
(解析器返回的值)是:
newMeme {
id: 'ck351j0f9pqa90919f52fx67w',
createdAt: '2019-11-18T23:08:46.437Z',
updatedAt: '2019-11-18T23:08:46.437Z',
}
Run Code Online (Sandbox Code Playgroud)
其中返回的字段是自动生成的字段。所以我收到以下突变的错误,因为我试图找到作者:
mutation{
meme(
memeItems: [{
type: TEXT
meta: "test1-meta"
value: "test1-value"
style: "test1-style"
}, {
type: TEXT
meta: "test2-meta"
value: "test2-value"
style: "test2-style"
}]
) {
id,
author {
displayName
}
}
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以看到什么问题可能导致此问题?(如前所述......直接检查数据库时,记录已成功创建,所有关系均按预期进行)。
小智 0
如 prisma 文档中所述,Prisma 客户端函数写入数据的承诺,例如对于 createMeme 函数,仅返回对象的标量字段:
在数据库中创建新记录时,创建方法采用一个输入对象,该对象包装要创建的记录的所有标量字段。它还提供了一种为模型创建关系数据的方法,这可以使用嵌套对象写入来提供。
每个方法调用都会返回一个对象的 Promise,该对象包含 刚刚创建的模型的所有标量字段。
请参阅: https: //www.prisma.io/docs/prisma-client/basic-data-access/writing-data-JAVASCRIPT-rsc6/#creating-records
要返回对象的关系,您需要使用信息片段或 Fluent api 再次读取对象,请参阅:https://www.prisma.io/docs/prisma-client/basic-data-access/reading-数据-JAVASCRIPT-rsc2/#关系
归档时间: |
|
查看次数: |
6967 次 |
最近记录: |