如何使用typeorm在nestjs中实现分页

问题描述 投票:3回答:2

无论如何,用单个查询获得总计数和记录,而不是执行两次查询。或者我如何在两个查询中重用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'}]}

typescript nestjs typeorm
2个回答
9
投票

你可以在这个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
    }
}

您可以在here找到存储库API。有关Repository类的更多文档可以在here找到。


0
投票

如果你需要通过许多记录分页,即几次迭代,(可能在迁移或批量更新期间)。

async getPaginatedResults(query: any, transactionManager?: EntityManager): Promise<any> {

}
© www.soinside.com 2019 - 2024. All rights reserved.