ID ile bir 'Ürün' bulmaya çalışıyorum ve iki koşulda 'Fotoğraf'ı bulmaya çalışıyorum: yerel ayar ve aktif durum. İşte Doctrine2 LEFT JOIN 2 koşullu
benim QueryBuilder var: AKTİF fotoğraf olduğunda hiçbir Resimler veya zaman iyi çalışır$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 ));
ancak aktif olmayan Foto orada değil ne zaman biriyle eşleşmesi nedeniyle iki koşul. Ben mesela sadece yerel kısmı için, sadece tek bir koşulu kullanırsanız
, iyi çalışıyor: Şimdilik
$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() ));
, tezler sonuçları ve unset etkin olmayan tüm Foto'daki ben döngü ... ama QueryBuilder'da yapmak için temiz bir yol istiyorum.
Ben de JOIN yan tümcesi SOL bazı koşullar getirmeye çalıştı:->leftJoin('photo.translations', 'phototTranslation', Doctrine\ORM\Query\Expr\JOIN::WITH, 'photoTranslation.locale = :locale AND photoTranslation.active = :active')
Ama her zaman etkin olmayan olsa bile, Foto döndürür.
$em = $this->getEntityManager();
$qb = $em->createQueryBuilder();
$qb
->select('p', 'pp')
->from('Product', 'p')
->leftJoin('p.photos', 'pp')
->leftJoin('pp.translations', 'ppt', Doctrine\ORM\Query\Expr\Join::WITH, $qb->expr()->andX(
$qb->expr()->eq('ppt.locale', ':locale'),
$qb->expr()->eq('ppt.active', ':active')
))
->where('p.id', ':productId')
->setParameters(
array(
'productId', $productId,
'active', $active,
'locale', $locale
)
);
$query = $qb->getQuery();
return $query->getResult(); // or ->getSingleResult();
NOT: Bir çözüm olabilir bu sorun için bir orWhere
Maalesef, bu durumda hem "etkin" hem de "yerel" koşullar gereklidir. – Tiois
@Tiois Her tablonun küçük bir örneğini ve beklediğiniz sonuçları ekleyebilir misiniz? Kendimi ve başkalarının potansiyel sorunu daha iyi görmesine yardımcı olabilir. – Shawn
veya WTF sonuçlarını nereden alabilir, kullanmamanız önerilir. – Hornth