Как выполнять параметр поиска по условию? typeorm (queryBuilder)
Есть запрос на получение данных из БД постгрес:
const uni = await this.contactInfoRepo
.createQueryBuilder('contact_info')
.leftJoinAndSelect('contact_info.university', 'university')
.leftJoinAndSelect('contact_info.country', 'country')
.leftJoinAndSelect('contact_info.region', 'region')
.leftJoinAndSelect('contact_info.city', 'city')
.leftJoinAndSelect('university.directions', 'directions')
.leftJoinAndSelect('directions.admissionInfo', 'admissionInfo')
.leftJoinAndSelect('directions.info', 'info')
.leftJoinAndSelect('university.prices', 'prices')
.leftJoinAndSelect('university.structureUniversity', 'structureUniversity')
.orderBy(`university.${field}`, `${type}`)
.where('university.status = true')
.where("country.id = :id", { id: country }) //1
.where("region.id = :id", { id: region }) //23
.where("city.id = :id", { id: city }) //38
.skip(skip)
.take(take)
.getMany()
При указании country/region/city все работает, но если хоть 1 параметр передать как 0 или null запрос ничего не выводит, в то время как аналогичный запрос но на .find отлично работает, в чем дело? как сделать region и city не обязательными!!!!
Аналогичный пример с .find (рабочий)
const total = await this.contactInfoRepo.find({
relations: [...],
where: {
country: {
id: country
},
region: {
id: region
},
city: {
id: city
},
university: {
status: true
},
},
})
Источник: Stack Overflow на русском