You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Prisma自关联添加用户联系人失败,求代码修改方案

问题:Prisma自关联实现用户联系人时,添加联系人功能无法运行

我在Web应用中采用Prisma的自关联方式实现用户联系人功能,定义了如下User模型的Prisma schema:

model User {
  userId        Int         @id @default(autoincrement())
  registeredAt  DateTime   @default(now())
  firstName     String      @db.VarChar(250)
  lastName      String      @db.VarChar(250)
  email         String      @db.VarChar(250)
  password      String      @db.VarChar(250)
  socketId      String?      @db.VarChar(250)
  role          String     @default("user")
  confirmedAccount  DateTime?
  contacts User[]  @relation("ContactsList")
  addedByContacts  User[]  @relation("ContactsList")
}

目前查询用户联系人的功能正常,但添加联系人的代码无法运行,以下是我编写的添加联系人代码:

try {
    const addUser = await prisma.user.update({
      where: {
        userId: id
      },
      data: {
        contacts: { 
          create: {
            data: {userId: 6} // <- hardcoded testing with this id which i want to add to the current user who is defined by id
          }
        }
      }
    })
    res.status(201).json({ message: 'Added contact' });
  } catch (error) {
    res.status(422).json({ message: error });
    return;
  }

请帮忙指出代码中需要修改的地方,以实现添加联系人的功能。


解决方案

你的核心错误是误用了create操作——create是用来创建新用户记录并关联,但添加联系人的场景是关联已存在的用户,因此必须改用connect操作。具体修改如下:

  • 将contacts下的create替换为connect,直接传入目标用户的ID匹配条件,无需嵌套data字段:

修改后的代码:

try {
    const addUser = await prisma.user.update({
      where: {
        userId: id
      },
      data: {
        contacts: { 
          connect: { userId: 6 } // 直接关联已存在的用户
        }
      }
    })
    res.status(201).json({ message: 'Added contact' });
  } catch (error) {
    res.status(422).json({ message: error.message }); // 建议返回error.message,错误信息更清晰
    return;
  }

补充说明

  • 若需要一次性添加多个联系人,可使用connect的数组形式:
    contacts: {
      connect: [{ userId: 6 }, { userId: 7 }]
    }
    

内容的提问来源于stack exchange,提问作者Marcel Dz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 19:15:51