我真的知道問題出在我身上,Prisma 的一對多關系運行良好,但請多多包涵。
1.這是我遇到問題的模型部分:
model Product{
Id Int @id @default(autoincrement())
Uuid String @unique @default(uuid())
Title String
BrandName String?
Thumbnails Thumbnail[] // one to many between thumbnail and Product
Price Float
DiscountRate Float?
Category Category @relation(fields: [CategoryId], references: [Id]) // one to many between Category and Product
CategoryId Int // The field containing the ID of the Category of this product
Status Status
Favorite Boolean @default(false)
Stock Int @default(0)
Item Item[] // one to many between Item and Product
}
model Cart{
Id Int @id @default(autoincrement())
Items Item[] // one to many between Item and Cart
}
model Item{
Id Int @id @default(autoincrement())
Product Product @relation(fields: [ProductId], references: [Id]) // one to many between Item and Product
ProductId Int
Quantity Int
Cart Cart? @relation(fields: [CartId],references: [Id]) // one to many between Cart and Item
CartId Int?
}
2. API 代碼(NextJs)
// addItem.js
import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();
export default async (req, res) => {
let PrId = req.body.prodId;
let Qte = req.body.Qte;
let newItem = await prisma.item.create({
data:{
Quantity: Qte,
Product:{
connect:{
Id: PrId,
},
},
Cart:{
connect:{
Id: req.body.cartId
}
}
},
});
return res.status(200).json(newItem);
};
3.問題解釋:
現在問題是我在資料庫中有多個購物車,每個購物車都包含模型中顯示的專案。真正的問題在于創建新專案:
- 添加第一項進展順利。
- 當我想添加另一個連接到同一產品的專案時,我收到如下錯誤:
Unique constraint failed on the constraint: `Item_ProductId_key`
at RequestHandler.handleRequestError (C:\Users\Bachar\Desktop\First_Freelance\node_modules\@prisma\client\runtime\index.js:30873:13)
at RequestHandler.request (C:\Users\Bachar\Desktop\First_Freelance\node_modules\@prisma\client\runtime\index.js:30856:12)
at async PrismaClient._request (C:\Users\Bachar\Desktop\First_Freelance\node_modules\@prisma\client\runtime\index.js:31836:16)
at async __WEBPACK_DEFAULT_EXPORT__ (webpack-internal:///(api)/./pages/api/addItem.js:12:19)
at async Object.apiResolver (C:\Users\Bachar\Desktop\First_Freelance\node_modules\next\dist\server\api-utils\node.js:367:9)
at async DevServer.runApi (C:\Users\Bachar\Desktop\First_Freelance\node_modules\next\dist\server\next-server.js:474:9)
at async Object.fn (C:\Users\Bachar\Desktop\First_Freelance\node_modules\next\dist\server\next-server.js:736:37)
at async Router.execute (C:\Users\Bachar\Desktop\First_Freelance\node_modules\next\dist\server\router.js:252:36)
at async DevServer.run (C:\Users\Bachar\Desktop\First_Freelance\node_modules\next\dist\server\base-server.js:381:29)
at async DevServer.run (C:\Users\Bachar\Desktop\First_Freelance\node_modules\next\dist\server\dev\next-dev-server.js:724:20) {
code: 'P2002',
clientVersion: '4.5.0',
meta: { target: 'Item_ProductId_key' },
page: '/api/addItem'
}
uj5u.com熱心網友回復:
首先感謝所有看過這個的人。ProductId我在上述模型內部Cart標記為的遷移之前進行了遷移@unique,我在最后一次遷移中將其洗掉。問題是,即使在使用npx prisma migrate dev. 我復制了架構檔案,洗掉了整個 prisma 檔案夾,使用npx prisma init 來生成一個新檔案夾,然后粘貼架構,遷移并瞧!
無論如何,如果有人知道如何在不洗掉架構檔案的情況下做到這一點,告訴我這將是一個很大的幫助,因為如果應用程式已經投入生產,那將是一天的地獄。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/532146.html
