Как я могу реализовать поиск постов, содержащих определенные ключевые слова, и разбить результат на страницы для пагинации? В настоящее время я ищу только по строгому сравнению, но хотел бы искать с помощью метода includes. Вот мой код для получения массива постов из репозитория с использованием NestJS и PostgreSQL:
```typescript
async getAllTutors(identification_post: any, dto: PaginationDto) {
const [result, total] = await this.repository.findAndCount({
where: {
post_text: Like(`%${identification_post}%`)
},
skip: (+dto.page - 1) * +dto.limit,
take: +dto.limit,
});
}
```
Как я могу изменить этот код, чтобы искать с использованием метода includes?
Для того чтобы использовать метод `includes` вместо строгого сравнения, вы можете использовать оператор `ILIKE` вместо `Like`. Оператор `ILIKE` в PostgreSQL выполняет поиск без учета регистра и является аналогом метода `includes` в JavaScript.
Вот обновленный код для вашего запроса:
```typescript
async getAllTutors(identification_post: any, dto: PaginationDto) {
const [result, total] = await this.repository.findAndCount({
where: {
post_text: ILike(`%${identification_post}%`)
},
skip: (+dto.page - 1) * +dto.limit,
take: +dto.limit,
});
}
```
Теперь поиск будет осуществляться с использованием метода `includes` вместо строгого сравнения. В результате вы получите массив данных из базы данных, который будет отфильтрован в соответствии с заданными условиями и разбит на страницы для пагинации.
{
where: [
{ post_text: ILike(`%репетитор%`) },
],
},
{
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');
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 };
}
}
}