我们有一个“Listing”模型的示例,我们希望能够为它分配一个“listing type”,例如,销售/ Rent /(或Both)。如果两者都是,我们如何在列表中同时拥有它们,以通过它们的“列表类型”来查询它们。我们一直在考虑建立一个多对多的关系,并为“ListingType”创建一个模型。这样,“Listing”模型就可以容纳“ListingType”模型的多个示例。
(We尝试做一个隐式的多对多关系,但PlanetScale抱怨,因为他们不支持外键,所以我们正在考虑尝试一个显式的多对多关系,但我们希望得到一些关于替代方案的指导。提前谢谢你。
(We正在使用Prisma和PlanetScale)
model Listing {
id Int @id @default(autoincrement())
name String
slug String @unique
bio String
price Int
userId Int
user User @relation(fields: [userId], references: [id])
status ListingStatus @default(ARCHIVED)
visibility ListingVisibility @default(PUBLIC)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
listingTypes ListingOnListingType[]
}
model ListingType {
id Int @id @default(autoincrement())
name ListingTypeEnum @unique
ListingOnListingType ListingOnListingType[]
}
model ListingOnListingType {
listing Listing @relation(fields: [listingId], references: [id])
listingId Int
listingType ListingType @relation(fields: [listingTypeId], references: [id])
listingTypeId Int
assignedAt DateTime @default(now())
assignedBy String
@@id([listingId, listingTypeId])
}
1条答案
按热度按时间idfiyjo81#
你可以在Prisma和Planetscale中使用隐式的多对多关系。确保您已更新到最新版本的Prisma。
缺点是它必须执行全表查找,因此带有@@索引的显式多对多是理想的