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

Prisma一对多关联失效求助:创建多产品触发唯一约束错误

问题描述

使用Prisma搭配Postgres实现一对多关联:一个User可拥有0个或多个Product。能为特定用户创建1个产品,但创建第二个时遇到错误:

Invalid prisma.product.create() invocation: Unique constraint failed on the fields: ('userEmail')

相关代码

schema.prisma

model Product {
  id              String   @id @default(cuid())
  createdAt       DateTime @default(now())
  updatedAt       DateTime @updatedAt
  name            String
  description     String?
  published       Boolean  @default(false)
  user            User     @relation(fields: [userEmail], references: [email])
  userEmail       String @unique
  productImageUrl String?
}

model User {
  id            String    @id @default(cuid())
  name          String?
  email         String?   @unique
  emailVerified DateTime?
  image         String?
  active        Boolean?
  products      Product[]
}

Next.js API路由

const Index = async (_req: NextApiRequest, res: NextApiResponse) => {
  const reqBody = _req.body ?? null;

  if (!reqBody) res.status(200).json({ message: "No request body found" });
  const product = await prisma.product.create({
    data: {
      user: {
        connect: {
          email: "xxx@x.com" // 该用户已存在于数据库中
        },
      },
      published: true,
      name: "Test Product 3",
      createdAt: new Date,
      updatedAt: new Date,
    }
  })
  res.status(200).json({ data: reqBody })
};
解决方案

问题根源是Product模型的userEmail字段被添加了@unique约束,这强制要求每个邮箱只能关联一个产品,完全违背了“一个用户拥有多个产品”的设计逻辑。

修复步骤:

  1. 修改schema.prisma,移除Product模型中userEmail字段的@unique约束:
model Product {
  id              String   @id @default(cuid())
  createdAt       DateTime @default(now())
  updatedAt       DateTime @updatedAt
  name            String
  description     String?
  published       Boolean  @default(false)
  user            User     @relation(fields: [userEmail], references: [email])
  userEmail       String // 移除@unique约束
  productImageUrl String?
}
  1. 重新生成迁移文件:
npx prisma migrate dev --name remove-useremail-unique
  1. 执行迁移更新数据库结构:
    运行上述命令后,按提示确认即可完成数据库变更。

完成后再次尝试为同一用户创建多个产品,就不会触发唯一约束错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:35:37