Doctrine2 LEFT JOIN with 2 conditions

Eu estou tentando encontrar um 'Produto' por ID, e para esquerda juntar tudo é 'foto' em duas condições: a localidade e o estado ativo.

Aqui está o meu 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
             ));

Funciona bem quando não há fotos ou quando há fotos ativas, mas não quando há uma foto inativa porque não corresponde a uma das duas condições.

Se eu usar apenas uma condição, por exemplo, apenas a parte do código de idioma, tudo funcionará bem:

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

Por enquanto, faço um loop nesses resultados e desfaz todas as fotos inativas ... mas gostaria de uma maneira limpa de fazer no QueryBuilder.

Eu também tentei colocar as condições na cláusula LEFT JOIN:

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

Mas sempre retorna a foto, mesmo que seja inativa.

questionAnswers(2)

yourAnswerToTheQuestion