无论如何,用单个查询获得总计数和记录,而不是执行两次查询。或者我如何在两个查询中重用where条件。
async findAll(query): Promise<Paginate> {
const take = query.take || 10
const skip = query.skip || 0
const keyword = query.keyword || ''
const builder = this.userRepository.createQueryBuilder("user")
const total = await builder.where("user.name like :name", { name: '%' + keyword + '%' }).getCount()
const data = await builder.where("user.name like :name", { name: '%' + keyword + '%' }).orderBy('name', 'DESC').skip(skip).take(take).getMany();
return {
data: data,
count: total
}
}
{count:10,数据:[{id:1,名称:'David'},{id:2,名称:'Alex'}]}
你可以在这个project找到一些很好的例子。简而言之,typeorm
有一个非常好的方法特定于这个用例findAndCount
。
async findAll(query): Promise<Paginate> {
const take = query.take || 10
const skip = query.skip || 0
const keyword = query.keyword || ''
const [result, total] = await this.userRepository.findAndCount(
{
where: { name: Like('%' + keyword + '%') }, order: { name: "DESC" },
take: take,
skip: skip
}
);
return {
data: result,
count: total
}
}
如果你需要通过许多记录分页,即几次迭代,(可能在迁移或批量更新期间)。
async getPaginatedResults(query: any, transactionManager?: EntityManager): Promise<any> {
}