以下是我的 3 个模型的 Prisma 架构 --> 用户、购物车和商品。
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
name String
email String @unique
hashedPassword String
isAdmin Boolean @default(false)
cart Cart?
}
model Cart {
id String @id @default(auto()) @map("_id") @db.ObjectId
user User @relation(fields: [userId], references: [id])
userId String @unique @db.ObjectId
itemIDs String[] @db.ObjectId
items Item[] @relation(fields: [itemIDs], references: [id])
}
model Item {
id String @id @default(auto()) @map("_id") @db.ObjectId
name String
category String?
description String?
color String?
price Float
listImageUrl String[]
carts Cart[] @relation(fields: [cartIDs], references: [id])
cartIDs String[] @db.ObjectId
}
我想为购物车和商品定义一个显式的多对多关系,并添加一个属性,
quantity Int
来跟踪用户在购物车中拥有的商品副本数量。
我尝试这样做:
model CartItem {
cart Cart @relation(fields: [cartId], references: [id])
cartId String
item Item @relation(fields: [itemId], references: [id])
itemId String
quantity Int @default(1)
// *** THIS IS MY PROBLEM ***
@@id([cartId, itemId]) // But Compound Key's are not supported for MongoDB.
}
我们在这里能做什么?
我参考了以下 Prisma 文档,但它仅解释了隐式多对多关系的语法。 https://www.prisma.io/docs/orm/prisma-schema/data-model/relations/many-to-many-relations#mongodb
不要将 CartItem 创建为单独的模型,而是将其设为“嵌入文档”。这会将 CartItem 保存为购物车模型中的子文档。您甚至可以将购物车创建为用户模型中的子文档。
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
name String
email String @unique
hashedPassword String
isAdmin Boolean @default(false)
cart Cart?
}
model Cart {
id String @id @default(auto()) @map("_id") @db.ObjectId
user User @relation(fields: [userId], references: [id])
userId String @unique @db.ObjectId
items CartItem[]
}
model Item {
id String @id @default(auto()) @map("_id") @db.ObjectId
name String
category String?
description String?
color String?
price Float
listImageUrl String[]
carts Cart[] @relation(fields: [cartIDs], references: [id])
cartIDs String[] @db.ObjectId
}
type CartItem {
item Item @relation(fields: [itemId], references: [id])
itemId String
quantity Int @default(1)
}