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')

Но он всегда возвращает фотографию, даже если она неактивна.

Ответы на вопрос(1)

Ваш ответ на вопрос