Mongodb Prisma 2 多对多关系正在单方面工作

Posted

技术标签:

【中文标题】Mongodb Prisma 2 多对多关系正在单方面工作【英文标题】:Mongodb Prisma 2 many to many relation is working 1 sided 【发布时间】:2021-12-16 16:08:53 【问题描述】:

我的关系数据表有一个小问题,这是我的模型,问题在这个下面。

model User 
  id                    String     @id @default(dbgenerated()) @map("_id") @db.ObjectId
  createdAt             DateTime   @default(now())
  updatedAt        DateTime   @updatedAt
  email                 String     @unique
  firstName             String
...
  rsvpedSessions        Session[]  @relation("Rsvped", fields: [rsvpedSessionId])
  rsvpedSessionId       String[]   @db.Array(ObjectId)
  notRespondedSessions  Session[]  @relation("notResponded", fields: [notRespondedSessionId])
  notRespondedSessionId String[]   @db.Array(ObjectId)
  declinedSessions      Session[]  @relation("Declined", fields: [declinedSessionId])
  declinedSessionId     String[]   @db.Array(ObjectId)


model Session 
  id                 String   @id @default(dbgenerated()) @map("_id") @db.ObjectId
  createdAt          DateTime @default(now())
  updatedAt    DateTime @updatedAt
  title              String
  ...
  rsvpedUsers        User[]   @relation("Rsvped", fields: [rsvpedUserId])
  rsvpedUserId       String[] @db.Array(ObjectId)
  notRespondedUsers  User[]   @relation("notResponded", fields: [notRespondedUserId])
  notRespondedUserId String[] @db.Array(ObjectId)
  declinedUsers      User[]   @relation("Declined", fields: [declinedUserId])
  declinedUserId     String[] @db.Array(ObjectId)

当我通过将用户添加到 notResponded 来创建会话时。我可以在 notResponded 数组中看到用户,但是在用户上,我无法在 notRespondedSessions 下获得会话。它只是将用户链接到会话,但不会将会话链接到用户。

我创建会话

return await prisma.session.create(
        data: 
          ...args,
          notRespondedUserId: args.userID,
        ,
      );

还有一个细节,当我尝试在 notRespondedUsers 上连接时,它说连接不是有效的 arg。

你知道可能是什么原因吗?

【问题讨论】:

【参考方案1】:

如果您想创建一个会话并将其连接到现有的 user 记录,您应该使用带有相关关系字段 (notRespondedUsers) 的 connect API,而不是尝试将值直接分配给 @ 987654325@.

我认为这是您要查找的查询:

    await prisma.session.create(
        data: 
            ...args
            notRespondedUsers: 
                connect: 
                    id: args.userID   // if there is more than one user, you can also pass an array of  id: string objects to connect
                
            
        ,
    );

您可以在Prisma docs 中找到connect 的语法和详细信息。

【讨论】:

以上是关于Mongodb Prisma 2 多对多关系正在单方面工作的主要内容,如果未能解决你的问题,请参考以下文章

Prisma 多对多关系查询

更新 Prisma 中的多对多关系

使用 Prisma 通过关联表查询多对多关系

Prisma 删除与复合键的多对多关系

Prisma:在显式多对多关系中创建或连接记录

Nextjs / prisma:我可以手动命名多对多表吗?