Prisma - 创建 Post 和 N 个类别(显式 Many-to-Many)

Prisma - create Post with N amount of Categories (explicit Many-to-Many)

我有最基本的显式 Many-to-Many 关系:

model Category {
  id              Int     @id @default(autoincrement())
  title           String @db.VarChar(24)  
  posts           PostCategory[]
}

model Post {
  id              Int     @id @default(autoincrement())
  title           String @db.VarChar(24)  
  categories      PostCategory[]
}

model PostCategory { 
  category        Category     @relation(fields: [categoryId], references: [id])
  categoryId      Int 
  post            Post @relation(fields: [postId], references: [id])
  postId          Int 

  @@id([categoryId, postId]) 
  @@unique([categoryId, postId])
} 

我现在想要完成的是创建一个新的 Post 和 n 个类别。 假设我们有一个包含 n 个类别标题的字符串数组:

const myStringArray = ["Category1", "Category2", "Category3", ...];

如何创建一个查询将所有这些添加到我新创建的 post? 如果我把它放在静态中,这不是问题,但是我如何处理一个我不知道大小的列表?

const assignCategories = await prisma.post.create({
  data: {
    title: 'First Post Title',
    categories: {
      create: [
        {
          category: {
            create: {
              name: myStringArray[0],
            },
          },
        },
        {
          category: {
            create: {
              name: myStringArray[1],
            },
          },
        },
      ],
    },
  },
})

您可以使用Array.map()将每个字符串元素映射到所需形状的对象

const myStringArray = ['Category1', 'Category2', 'Category3'];

const assignCategories = await prisma.post.create({
    data: {
        title: 'First Post Title',
        categories: {
            create: myStringArray.map((title) => ({
                category: { create: { title } },
            })),
        },
    },
});

Array.map() 文档:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map