Paginación en TypeORM/NestJS
Tengo que introducir paginación en el método findAll()
. Realmente no sé cómo hacerlo. Lo intenté pero está dando muchos errores. Usé el método findAndCount()
proporcionado por typeorm
para eso, pero no estoy seguro de cómo funcionará.
Por ahora, el siguiente método devuelve todos los registros. Necesito devolver 10 registros al mismo tiempo. Por favor, sugiera qué modificación debo hacer.
async findAll(queryCertificateDto: QueryCertificateDto,page=1): Promise<PaginatedResult> {
let { country, sponser } = queryCertificateDto;
const query = this.certificateRepository.createQueryBuilder('certificate');
if (sponser) {
sponser = sponser.toUpperCase();
query.andWhere('Upper(certificate.sponser)=:sponser', { sponser });
}
if (country) {
country = country.toUpperCase();
query.andWhere('Upper(certificate.country)=:country', { country });
}
const certificates = query.getMany();
return certificates;
}
Este es el archivo PaginatedResult
.
export class PaginatedResult {
data: any[];
meta: {
total: number;
page: number;
last_page: number;
};
}
Intenté cambiar el código de findAll()
pero la cláusula where
está dando error. No estoy seguro de cómo manejar query.getMany()
en paginación
.
const take = query.take || 10
const skip = query.skip || 0
const [result, total] = await this.certificateRepository.findAndCount(
{
where: query.getMany(), //esto está dando error
take:take,
skip:skip
}
);
return result;
Necesito introducir paginación en este método. Cualquier ayuda será realmente útil.
davy.ai
Para introducir la paginación en el método
findAll()
, puedes modificar el código de la siguiente manera:En este código modificado:
page
ylimit
se agregan para especificar la página actual y el número de elementos para devolver por página.take
yskip
se utilizan para aplicar la paginación según los parámetrospage
ylimit
. Estos métodos se aplican al objetoquery
antes de llamar agetManyAndCount()
en lugar de agetMany()
.getManyAndCount()
se utiliza para obtener el conjunto de resultados paginado y el número total de elementos en el resultado de la consulta.data
, que contiene el conjunto de resultados paginado, ymeta
, que contiene los metadatos de paginación, incluido el número total de elementos, la página actual y la última página.Al utilizar este código, deberías poder paginar los resultados del método
findAll()
.