Выборка по нескольким параметрам typeorm/nestjs (createQueryBuilder)

Делаю фильтрацию по стране/области/городу и столкнулся с проблемой, если использовать .find то все отлично, находится пересечение страны/области/города, даже если указать например город 0 (которого нет), то выборка происходит по стране и области и все супер

    const total = await this.contactInfoRepo.find({
     relations: [...],
     where: {
      country: {
        id: country
      },
      region: {
        id: region
      },
      city: {
        id: city
      },
      university: {
        status: true
      },
    },
  })

введите сюда описание изображения

Но мне необходимо повторить это с использованием .createQueryBuilde, вот как я его переписал

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')
  .andWhere("country.id = :id", { id: country }) //1
  .andWhere("region.id = :id", { id: region }) //0
  .andWhere("city.id = :id", { id: city }) //0
  .limit(take)
  .offset(skip)
  .getMany()

При такой реализации вся выборка ломается и не работает пересечение страны/области/города, подскажите как исправить и что для этого использовать? Можно ли выполнить это на find?

введите сюда описание изображения

Вот контроллер где вызываю сервис и передаю параметры

   return await this.universitiesService.getUniversities(
      query.country > 0 ? query.country : null,
      query.region > 0 ? query.region : null,
      query.city > 0 ? query.city : null,
      query.field ? query.field : 'id',
      query.type,
      query.take,
      query.skip,
   )

Ответы (1 шт):

Автор решения: Alexander Chernin

Попробуйте вот так оформить запрос:

...
  .leftJoinAndSelect('contact_info.university', 'university', 'university.status = true')
  .leftJoinAndSelect('contact_info.country', 'country', 'county.id = :id', { id: country })
...

тоже самое для region и city.

И, соответственно, из запроса убрать

  .where('university.status = true')
  .andWhere("country.id = :id", { id: country }) //1
  .andWhere("region.id = :id", { id: region }) //0
  .andWhere("city.id = :id", { id: city }) //0
→ Ссылка