如何将数组作为参数传递给 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

Perl 如何将数组作为参数传递给另一个 Perl 脚本

如何将数组的值作为第二个参数传递给 awk 的 split 函数?

如何将具有多个对象的状态数组作为参数传递给graphql突变?

Redis Lua 脚本 - 如何将数组作为参数传递给 nodejs 中的 Lua 脚本?