Doctrine2 LEFT JOIN z 2 warunkami

Próbuję znaleźć „Produkt” według ID, a do lewej dołączyć wszystkie „Zdjęcie” na dwóch warunkach: ustawienia regionalne I stan aktywny.

Oto mój 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
             ));

Działa dobrze, gdy nie ma zdjęć lub występują AKTYWNE zdjęcia, ale nie wtedy, gdy nie ma nieaktywnego zdjęcia, ponieważ nie odpowiada jednemu z dwóch warunków.

Jeśli używam tylko jednego warunku, na przykład tylko części ustawień regionalnych, to działa dobrze:

$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()
             ));

Na razie zapętlam wyniki i wyłączam wszystkie nieaktywne zdjęcia ... ale chciałbym zrobić czysty sposób w QueryBuilderze.

Próbowałem też umieścić warunki w klauzuli LEFT JOIN:

->leftJoin('photo.translations', 'phototTranslation', Doctrine\ORM\Query\Expr\JOIN::WITH, 'photoTranslation.locale = :locale AND photoTranslation.active = :active')

Ale zawsze zwraca zdjęcie, nawet jeśli jest nieaktywne.

questionAnswers(1)

yourAnswerToTheQuestion