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

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

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

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