2016-04-12 24 views
0

Bir dql sorgusuyla ilgili bir sorunla karşılaşıyorum. DQL - filtre öğeleri, ana ülke üzerindeki temelleri

I kriterlere çok ilişki için ayrıntıları pek çok ilişki bir çok sahip kriterler çok bir ilişki ile olan organes sonra organes ve birçok ilişkisi çoğuna sahip ayrıntıları bir çoğu ile protokolleri, bulmak için ülke ile birebir ilişkisi olan atölye.

Bir dizide yer alan ülke veya ülke ülke kodu olmayan protokolleri kurtarmam gerekiyor. Benim sorunum, bir ebeveynin boş ve diğeri değil, varlık doğrulamaktır. SQL'de çok fazla baz yok, bu yüzden belki bir şeyi anlayamıyorum. Cevabınız için şimdiden

$queryBuilder->select('p') 
     ->from($this->getClass(), 'p') 
    ->leftJoin('p.criteres', 'c') 
    ->leftJoin('c.details', 'd') 
    ->leftJoin('d.organes', 'o') 
    ->leftJoin('o.atelier', 'a') 
    ->where('a.country IN (' . $this->getUserCountriesFormated() . ') OR a.country IS NULL') 
    ->orderby('p.name', 'ASC'); 

Teşekkür:

THis benim DQL sorgusu olur.

Düzenleme: çünkü boş detay (ITA benim countriesformated dizide değil ülkenin) yukarı çekin protokolün bir örneği:

schema

+0

-> katılmak tek ülke valide protokolleri dönmek, ama aynı zamanda ebeveynleri olmadan taze oluşturulan protokoller gerekir. Sorguyu tersine çevirirsem, bu protokolleri de alamıyorum. – Kupris

cevap

0

Veri modeli biraz deli gibi görünüyor (Çok fazla NtoN ilişkileri), doğru olduğundan emin olun. Yöntem getUserCountriesFormated() yönteminin ülke kimliklerinin virgülle ayrılmış dizesini döndürdüğünü varsayalım, örneğin "1,2,3". Sonra yerine

->where('a.country IN (' . $this->getUserCountriesFormated() . ') OR a.country IS NULL') 

deneyin kullanmak:

->leftJoin('a.country', 'n') 
->where('(IDENTITY(n) IN (' . $this->getUserCountriesFormated() . ') OR IDENTITY(n) IS NULL)') 
+0

Yanıtınız için Thnks, kodunuzu denedim ama Bana bir istisna döndürdü (Hata: Geçersiz PathExpression. Bir SingleValuedAssociationField olmalıdır.). Sorunumu düzeltir mi bilmiyorum, ayrıca mesajımı istemediğim bir davranışla düzenliyorum. – Kupris

+0

Tüm hak dosyalarınızı göndermeniz gerekir. Ayrıca sorunu daha küçük olana indirmeye çalışın (böylece seçiminiz 6 öğeden geçmez). ayrıca oluşturulan SQL (günlük dosyasından) – Miro