[英]Prisma : how can I add a column on a query return?
假设我有一个带有名称和 ID 的表User
以及带有名称和内容的表Post
。 这两个表通过多对多关系链接(一个帖子可以有很多用户/作者,每个用户可以有很多帖子)
例子 :
model User {
id Int @id @default(autoincrement())
name String
posts users_to_posts[]
}
model Post {
id Int @id @default(autoincrement())
name String
users users_to_posts[]
}
model user_to_post {
user user? @relation(fields: [user_id], references: [id])
user_id Int
post signe? @relation(fields: [post_id], references: [id])
post_id Int
@@id([user_id, post_id])
}
我想要做的是查询用户表并拥有写最多帖子的前 10 位用户。
但是,我不希望只返回用户 + 帖子计数的组合,而是完整返回用户、他的 ID 和他在返回的 JSON 中作为单独键编写的帖子数量
我试图获得的示例(使用 nextJS ):
import { PrismaClient, Prisma } from '@prisma/client'
const prisma = new PrismaClient()
export default async function handler(req, res) {
const ret = await prisma.user.findMany({
include: {
posts: {
select: {
post: true
}
}
}
// include post count
// order by post count
// limit 10
});
res.status(200).json(ret)
}
如您所见,我的表中没有“计数”列,必须在查询期间插入
我现在最好的选择是解析获得的 json(ret 变量)并通过打字稿完成所有事情,但这远非理想
您可以使用orderBy
根据user
记录的posts
count
对user
记录进行排序。 此外,您可以使用take
运算符来限制记录数(工作方式类似于 SQL 中的LIMIT
命令)。 最后,包括count
的帖子,你可以添加里面include
。
这是您要查找的查询
await prisma.user.findMany({
orderBy: {
posts: {
_count: "desc",
},
},
take: 10,
include: {
_count: {
select: {
posts: true,
},
},
},
});
从我从你的问题明白了,你只想要回count
岗位,而不是岗位记录自己的。 但是,如果您还想返回发布记录,您也可以将其添加到include
语句中,就像您目前所做的那样。
进一步阅读所用运算符的文档:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.