Prisma创建关联数据时触发外键约束失败问题求助
问题原因
你的Prices模型中,article_id字段同时被用作两个外键:
- 关联
Articles表的id字段 - 关联
Articlelist表的articleID字段(且Articlelist.articleID是唯一约束)
当你通过Articles.create同时创建关联的Prices时,新生成的Articles.id会被赋值给Prices.article_id,但此时Articlelist表中并没有articleID等于这个值的记录,因此触发了外键约束失败的错误。
解决方案
方案一:移除Prices与Articlelist的不必要关联
如果业务逻辑中Prices不需要关联Articlelist,直接修改Prisma模型:
model Prices { id Int @id @default(autoincrement()) price Float article_id Int Articles Articles @relation(fields: [article_id], references: [id]) // 移除与Articlelist的关联定义 // Articlelist Articlelist? @relation(fields: [article_id], references: [articleID]) }
修改后执行prisma migrate dev更新数据库结构,再运行创建代码即可。
方案二:创建Prices时确保Articlelist存在
如果业务上确实需要Prices关联Articlelist,可选择以下两种实现方式:
方式1:同时创建Articles、Articlelist和Prices
调整创建代码,在创建Articles的同时生成对应的Articlelist并关联Prices:
await prisma.articles.create({ data: { article_desc, Prices: { create: { price, Articlelist: { create: { articleID: prisma.ref('Articles.id'), // 引用当前创建的Articles的id article_desc } } } } } });
方式2:先创建Articlelist,再创建Articles和Prices
若Articlelist需要提前存在,可先创建Articlelist,再关联创建其他数据:
// 先创建Articlelist const articleList = await prisma.articlelist.create({ data: { articleID: 1, // 可指定唯一id,或依赖数据库自增 article_desc } }); // 再创建Articles和关联的Prices await prisma.articles.create({ data: { article_desc, Prices: { create: { price, article_id: articleList.articleID // 使用已存在的Articlelist的articleID } } } });
内容的提问来源于stack exchange,提问作者Fred Durst
相关产品推荐
相关产品推荐

