javascript 显式多对多关系棱镜

euoag5mw  于 2023-03-16  发布在  Java
关注(0)|答案(3)|浏览(127)

我有三个棱镜模型,

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 docs跟踪这个参考。

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?
                        },
                    },
                },
            },
        });
khbbv19g

khbbv19g1#

您需要的是create,而不是connect。您需要在多对多表中创建一个新条目,将UserMap到Course。因此,您需要create该条目。
代码为:

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

1bqhqjot2#

如果您需要分配已存在的实体:

const response: course = await prisma.course.create(
            { data: 
                { ...someOtherData, 
                    userOnCourse: { create: [ {user: { connect: { id: 2 } } } ]}
                }  
            }
        );

这是令人困惑的,因为它说创建,但它的意思是创建一个连接到一个已经存在的实体。

mrfwxfqh

mrfwxfqh3#

当我使用createMany()时,这里的答案对我都不起作用。
直到我切换到create(),接受的答案才起作用。
以防其他人碰到这个。

相关问题