私の Prisma スキーマでは、投稿とカテゴリの間に多対多の関係があります。Postgres@map
の snake_case 命名規則に一致するオプションを追加しました。
model Post {
id Int @id @default(autoincrement())
title String
body String?
categories PostCategory[]
@@map("post")
}
model Category {
id Int @id @default(autoincrement())
name String
posts PostCategory[]
@@map("category")
}
model PostCategory {
categoryId Int @map("category_id")
postId Int @map("post_id")
category Category @relation(fields: [categoryId], references: [id])
post Post @relation(fields: [postId], references: [id])
@@id([categoryId, postId])
@@map("post_category")
}
複数のカテゴリを同時に持つ投稿を作成しようとしています。カテゴリが存在する場合は、connect
投稿にカテゴリを追加したいと思います。カテゴリが存在しない場合は、作成したいと思います。作成部分はうまく機能していますが、接続部分に問題があります。
await prisma.post.create({
data: {
title: 'Hello',
categories: {
create: [{ category: { create: { name: 'News' } } }],
connect: {
categoryId_postId: { categoryId: 1, postId: ? }, // This doesn't work, even if I had the postId
},
},
},
});
既存のカテゴリを、持っているスキーマを使用して新しい投稿に接続するにはどうすればよいですか?
ベストアンサー1
ここで必要なのは ですconnectOrCreate
。
したがって、次のようなものが機能するはずです。
await prisma.post.create({
data: {
title: 'Hello',
categories: {
create: [
{
category: {
create: {
name: 'category-1',
},
},
},
{ category: { connect: { id: 10 } } },
],
},
},
});
これについてはドキュメントでも詳しく読むことができますここ