Doctrine2 LEFT JOIN с 2 условиями
Я пытаюсь найти «Продукт» по идентификатору и оставить все его «Фото» в двух условиях: локаль И активное состояние.
Вот мой QueryBuilder:
$queryBuilder = $this->createQueryBuilder('p')
->select('p, photos, photoTranslation')
->leftJoin('p.photos', 'photos')
->leftJoin('photos.translations', 'photoTranslation')
->where('p.id = :id')
->andWhere('(photoTranslation.locale = :locale OR photoTranslation.locale IS NULL)')
->andWhere('(photoTranslation.active = :active OR photoTranslation.active IS NULL)')
->setParameters(array(
'id' => $id
'locale' => $this->getLocale(),
'active' => true
));
Он отлично работает, когда нет фотографий или когда есть активные фотографии, но не когда неактивная фотография, потому что она не соответствует одному из двух условий.
Если я использую только одно условие, например, только часть языка, оно работает нормально:
$queryBuilder = $this->createQueryBuilder('p')
->select('p, photos, photoTranslation')
->leftJoin('p.photos', 'photos')
->leftJoin('photos.translations', 'photoTranslation')
->where('p.id = :id')
->andWhere('(photoTranslation.locale = :locale OR photoTranslation.locale IS NULL)')
->setParameters(array(
'id' => $id
'locale' => $this->getLocale()
));
Пока я зацикливаюсь на этих результатах и сбрасываю все неактивные фотографии ... но я бы хотел, чтобы в QueryBuilder был чистый способ сделать это.
Я также попытался поместить условия в предложение LEFT JOIN:
->leftJoin('photo.translations', 'phototTranslation', Doctrine\ORM\Query\Expr\JOIN::WITH, 'photoTranslation.locale = :locale AND photoTranslation.active = :active')
Но он всегда возвращает фотографию, даже если она неактивна.