我正在学习如何使用 Prisma,但我遇到了一个相当简单的问题。假设我有这些实体(简化):
model User {
id Int @id @default(autoincrement())
email String @unique
password String
name String
avatar String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
UserInfo UserInfo?
}
model UserInfo {
id Int @id @default(autoincrement())
user_id Int @unique
user User @relation(fields: \[user_id\], references: \[id\])
is_active Boolean @default(false)
}
我想检索按 UserInfo 表中的 is_active 字段排序的所有用户,然后按 User 表中的另一个字段排序。某些用户的用户信息可能未填充。
要明确的是,这是我想要实现的查询:
SELECT * FROM User u
FULL JOIN UserInfo ui ON u.id = ui.user_id
ORDER BY ui.is_active DESC, u.name
我尝试了以下方法(以及其他一些我现在找不到的方法),但没有运气:
const result = await prisma.user.findMany({
include: {
UserInfo: {
orderBy: {
is_active: 'desc',
},
},
},
});
const result = await prisma.user.findMany({
select: {
// [...fields]
userInfo: {
select: {
// [...fields]
},
orderBy: {
is_active: 'desc',
},
},
},
orderBy: [
{
is_active: 'desc',
},
{
name: 'desc',
},
],
});
我错过了什么?我是不是做错了什么?
我觉得我错过了一些非常愚蠢的东西,或者我没有正确理解文档......
任何帮助将不胜感激!
预先感谢您的协助!
你可以尝试这个查询吗
const res = await prisma.user.findMany(
{
orderBy:[
{
UserInfo:{
is_active: 'desc'
},
},
{
name: 'desc'
}
]
}
)
此外,您可以查看文档的部分
我觉得你已经找到了答案,但是是的,这是可能的,实际上你的代码似乎是正确的并且应该可以工作。
这在我的用例中非常有效:
const response = await prisma.configuration.findUnique({
where: { id: configuration.id },
include: {
water_tanks: {
orderBy: {
id: "asc",
},
},
wash_bays: {
orderBy: {
id: "asc",
},
},
},
});