@Bredy

Как получить отфильтрованный по условию и с пагинацией массив с базы данных?

Использую nestJs и postrges.
Я хочу получить из репозитория по ключевым словам, массив с разбивкой на страницы.
Пользователь направляет ключевые слова и я хочу получить массив постов, но при этом проверить содержит ли текст поста это слово. В данной ситуации он ищет по строгому сравнению а не как includes.
Как такой вариант можно реализовать, что-то не пойму, но обязательно хочу вывести это через пагинацию.

async getAllTutors(identification_post: any, dto:PaginationDto) {

        const [result, total] = await this.repository.findAndCount({
            skip: (+dto.page - 1) * +dto.limit,
            take: +dto.limit,
            where: [
                { post_text: 'репетитор'},
            ],
        });
    }
  • Вопрос задан
  • 113 просмотров
Решения вопроса 1
yarkov
@yarkov
Помог ответ? Отметь решением.
import { ILike } from 'typeorm';

where: [
                { post_text: ILike(`%репетитор%`) },
            ],
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
i229194964
@i229194964
Веб разработчик
import { Repository, EntityRepository } from 'typeorm';
import { PaginationDto } from './pagination.dto';

@EntityRepository(YourEntity)
export class YourEntityRepository {
  constructor() {
    super(YourEntity);
  }

  async getAllTutors(identification_post: string, dto: PaginationDto) {
    const query = this.createQueryBuilder('yourEntityAlias'); // Замените 'yourEntityAlias' на алиас вашей сущности

    query.where('post_text ILIKE :keyword', { keyword: `%${identification_post}%` });

    const [results, total] = await query
      .take(dto.limit)
      .skip((dto.page - 1) * dto.limit)
      .getManyAndCount();

    return { results, total };
  }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы