【发布时间】:2021-10-28 01:03:41
【问题描述】:
我正在尝试使用 Prisma 实现一个类似于 tinder 的简单应用程序,用户可以左右滑动来喜欢或不喜欢另一个用户,之后,我就能够获取匹配项和候选人。匹配的都是喜欢我的用户,候选的都是除了我自己、我的匹配、我不喜欢的用户和不喜欢我的用途之外的所有用户。
我让它创建了一个用户模型、一个喜欢模型和一个不喜欢模型
model User {
id String @id
username String @default(value: "")
age Int @default(value: 0)
bio String @default(value: "") @db.VarChar(1000)
}
model Likes {
id Int @id @default(autoincrement())
userId String
likedUserId String
}
model Dislikes {
id Int @id @default(autoincrement())
userId String
dislikedUserId String
}
并创建几个相当复杂的 SQL 语句并使用 queryRaw 运行它们
它确实有效,但我觉得我没有正确使用 Prisma,我只是将 SQL 转换为 Prisma。所以我决定改变我的模型如下
model User {
id String @id
username String @default(value: "")
age Int @default(value: 0)
bio String @default(value: "") @db.VarChar(1000)
liked User[] @relation("LikedUserToUser")
disliked User[] @relation("DislikedUserToUser")
}
我的 IDE 提示我添加相反的关系或运行 prisma format
这样做之后,我最终得到了这样的结果
model User {
id String @id
username String @default(value: "")
age Int @default(value: 0)
bio String @default(value: "") @db.VarChar(1000)
liked User[] @relation("LikedUserToUser")
disliked User[] @relation("DislikedUserToUser")
userToLike User? @relation("LikedUserToUser", fields: [userId], references: [id])
userToDislike User? @relation("DislikedUserToUser", fields: [userId], references: [id])
userId String?
}
现在,它似乎工作得很好,我可以“喜欢”一个用户
const user = await prisma.user.update({
where: { id: '1' },
data: {
liked: {
connect: { id: '2' },
},
},
})
当我查询用户“1”时,包括我得到的喜欢
{
id: '1',
username: 'Cheryl',
age: 36,
bio: 'ornare, libero at auctor ullamcorper',
userId: null,
liked: [
{
id: '2',
username: 'Daphne',
age: 57,
bio: 'at sem molestie sodales',
userId: '1'
}
]
}
我的问题是我不知道如何运行上述更复杂的查询、匹配项和候选人。有什么想法吗?
【问题讨论】:
标签: mysql typescript prisma prisma2