如何将数组作为参数传递给 Nexus?如何使用 Prisma 从这个数组创建多个对象?
Posted
技术标签:
【中文标题】如何将数组作为参数传递给 Nexus?如何使用 Prisma 从这个数组创建多个对象?【英文标题】:How to pass an array as args to Nexus? How to create multiple objects from this array using Prisma? 【发布时间】:2021-09-02 22:06:36 【问题描述】:我正在尝试学习同时使用 Prisma 和 Nexus。我希望有经验的人可以帮助我。
我想创建一个附有几张图片的帖子。
我的 Prisma 模型如下所示:
model Post
id String @id @default(cuid())
title String
body String
images Image[] @relation("ImagePost")
model Image
id String @id @default(cuid())
post Post @relation("ImagePost", fields: [postId], references: [id])
postId String
name String
url String
我需要编写一个 Nexus 突变,它可以接受带有标题、正文和图像 url 数组的帖子。我需要为每个网址创建一个图像记录,并将它们附加到帖子中。
const Mutation = objectType(
name: 'Mutation',
definition(t)
t.field('createPost',
type: 'Post',
args:
title: nonNull(stringArg()),
body: stringArg(),
images: ????
,
resolve: (_, args, context: Context) =>
return context.prisma.post.create(
data:
title: args.title,
body: args.body,
images: ????
,
)
,
)
)
你能帮我弄清楚如何正确地做到这一点吗?
-
我不知道如何将 json 对象数组传递给 args。有
stringArg()
或intArg()
之类的东西,但是你如何接受一个数组呢?
创建一堆Image
对象并将它们附加到Post
的正确方法是什么?我应该有一个 for 循环并手动创建它们,然后以某种方式附加它们吗?还是有更好的方法?
你知道有没有人做这种事情的例子?
【问题讨论】:
【参考方案1】:就像nonNull
一样,也有list
类型。您可以使用它并在其中创建一个arg
。
至于创建图像,您可以使用create
并将图像数组传递给post
,如here 所示。
【讨论】:
【参考方案2】:我已经使用extendInputType
做到了,这里有一个例子
-
首先你必须定义de输入
export const saleDetailInput = extendInputType(
type: 'SaleDetailInput',
definition(t)
t.field(SaleDetail.productId)
);
-
定义参数
export const createSale = extendType(
type: 'Mutation',
definition(t)
t.nonNull.list.field('createSale',
type: 'Sale',
args:
total: nonNull(floatArg()),
customerId: nonNull(intArg()),
products: nonNull(list(nonNull('SaleDetailInput'))),
,
async resolve(parent, products, ...others , context)
,
)
,
)
【讨论】:
以上是关于如何将数组作为参数传递给 Nexus?如何使用 Prisma 从这个数组创建多个对象?的主要内容,如果未能解决你的问题,请参考以下文章
当我们将数组作为参数传递给其他函数时,数组的值如何变化? [复制]
如何将 URL 中的数组作为参数传递给 Promise.all
如何将数组的值作为第二个参数传递给 awk 的 split 函数?