Doctrine2 LEFT JOIN с 2 условиями
я пытаюсь найтиТовар' по идентификатору, а слева присоединиться ко всемФото' на двух условиях: локаль И активное состояние.
Вот's мой 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')
Но он всегда возвращает фотографию, даже еслинеактивны.