Sto provando a trovare un 'Prodotto' per ID, ea sinistra unisco tutte le sue 'Foto' a due condizioni: la locale E lo stato attivo.Doctrine2 SINISTRA SINISTRA con 2 condizioni
Ecco la mia 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 ));
Funziona bene quando ci sono foto o quando ci sono le foto attiva, ma non quando c'è un inattiva Photo perché non corrisponde a uno dei due condizioni.
Se io uso una sola condizione, per esempio solo la parte locale, funziona benissimo:
$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() ));
Per ora, ciclo sulla tesi risultati e disinserire tutte le foto inattive ... ma Mi piacerebbe un modo pulito di fare in QueryBuilder.
Ho anche provato a mettere le condizioni sul LEFT JOIN clausola:
->leftJoin('photo.translations', 'phototTranslation', Doctrine\ORM\Query\Expr\JOIN::WITH, 'photoTranslation.locale = :locale AND photoTranslation.active = :active')
ma restituisce sempre la foto, anche se è inattivo.
Sfortunatamente, in questo caso sono richieste entrambe le condizioni "attive" e "locali". – Tiois
@Tiois Puoi aggiungere un piccolo esempio di ogni tabella e i risultati che ti aspetti? Potrebbe aiutare me stesso e gli altri a vedere meglio il potenziale problema. – Shawn
o Dove è possibile ottenere risultati WTF, si consiglia vivamente di non utilizzarlo. – Hornth