显式多对多关系prisma

时间:2021-06-08 21:34:18

标签: javascript relationship prisma prisma2

我有这 3 个棱镜模型,

model user {
  id                        String                 @id @default(cuid())
  createdAt                 DateTime               @default(now())
  updatedAt                 DateTime               @default(now())
  courses                   userOnCourse[]
}

model course {
  id                      String                         @id @default(cuid())
  createdAt               DateTime                       @default(now())
  updatedAt               DateTime                       @default(now())
  users                   userOnCourse[]
  title                   String
  description             String
}

model userOnCourse {
  createdAt     DateTime    @default(now())
  user          user        @relation(fields: [userId], references: [id])
  userId        String
  course        Course      @relation(fields: [courseId], references: [id])
  courseId      String

  @@id([userId, courseId])
}

这是一个多对多关系,一个用户可以有很多课程,一个课程可以有很多用户,为了引用显式的 m-m 关系,我创建了另一个模型名称 userOnCourse

我正在努力将 courseId 的引用传递到 userOnCourse 模型中,我想将课程与 userid 一起连接到该模型中,但由于它是在运行时创建的,因此似乎无法在编译时传递 courseId。

这里是代码,假设我们在创建课程时已经有了用户数据,如何传递运行时创建的courseId,并建立连接。

我正在关注 Prisma 文档中的 reference

const createCourse = await prisma.course.create({
            data: {
                title: courseData.title,
                description: courseData.description,
                users: {
                    connect: {
                        userId_courseId: {
                            userId: user.id,
                            courseId: ?? // That is where the problem is, how can i add the coursesId?
                        },
                    },
                },
            },
        });

2 个答案:

答案 0 :(得分:1)

您需要的是 create 而不是 connect。您需要在多对多表中创建一个新条目,将 UserCourse 映射。所以你需要create那个条目。

代码如下:

await prisma.course.create({
    data: {
      description: 'des',
      title: 'title',
      users: { create: { userId: user.id } },
    },
})

答案 1 :(得分:0)

我有点陷入同样的​​情况,但是上面的答案很有帮助,你能告诉我你是如何设法反转查询的吗?我的意思是您如何将相同的课程明确分配给不同的用户?