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
我有最基本的显式 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