Как реализовать разбиение на страницы в nestjs с помощью typeorm - PullRequest
0 голосов
/ 25 декабря 2018

В любом случае, чтобы получить общее количество и записать в одном запросе, вместо выполнения запроса два раза.Или как я могу использовать условие 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, data: [{id: 1, name: 'David'}, {id: 2, name: 'Alex'}]}

Ответы [ 2 ]

0 голосов
/ 29 апреля 2019

Если вам нужно разбить на страницы МНОГИЕ записи, т.е. несколько итераций (возможно, во время миграции или массового обновления).

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

}
0 голосов
/ 25 декабря 2018

Вы можете найти хороший пример в этом проекте .Короче говоря, 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
    }
}

API репозитория, который вы можете найти здесь .Дополнительную документацию по классу Repository можно найти здесь .

...