Prisma 多対多リレーション: 作成と接続 質問する

Prisma 多対多リレーション: 作成と接続 質問する

私の 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 } } },
            ],
          },
        },
      });

これについてはドキュメントでも詳しく読むことができますここ

おすすめ記事