2011-09-23 14 views
12

Muhtemelen bu kolay bir çözümdür, ancak bir çözüm bulamıyorum.Doctrine2 ile çoktan çoğa ilişkisi arama

Çok sayıda ilişkiye sahip basit bir Makale ve Makale Öğeleri var. Tüm makaleleri belirli bir etiketle (veya etiketlerle) nasıl alabilirim?

Benim şu çalışır:

$qb = $repository->createQueryBuilder('a') 
    // ... 
    ->andWhere('a.tags = :tag') 
    ->setParameter('tag', 'mytag') 
    // ... 

veya

->andWhere(':tag in a.tags') 
    ->setParameter('tag', 'mytag') 

... çalışmadı. Teşekkürler!

$query = $em->createQuery('SELECT u.id FROM CmsUser u WHERE EXISTS (SELECT p.phonenumber FROM CmsPhonenumber p WHERE p.user = u.id)'); 
+0

Birçok ilişki tek yönlü veya çift yönlüdür mü? – Problematic

+0

@Problematic: Tek yönlü eşlemeyi kullandım. Benim senaryo için hangisi daha iyi olurdu? – Czechnology

+1

Çift yönlü eşleme kullanıyorsanız, etiketlerinize bir "getArticles()" yöntemi ekleyebilir ve etiketi kullanarak makale koleksiyonu alabilirsiniz. – Problematic

cevap

39

Ve kazanan ... ... olan herkese

$qb = $repository->createQueryBuilder('a') 
    // ... 
    ->andWhere(':tag MEMBER OF a.tags'); 
    ->setParameter('tag', $tag); 
    // ... 

Teşekkür lütfenDrumroll geçerli:

+0

kullanmayı öneririm 1 etiket için çalışır, ancak çeşitli etiketlere göre tüm makaleleri nasıl alabilirsiniz? –

+1

@faost, bence sadece * cümleleri ve daha fazla parametre eklemeniz gerekecek. '...-> veWhere (': tag1 a.tags ÜYESİ') -> setParameter ('tag1', $ tag1) -> veWhere (': tag2 a.tags ÜYESİ') -> setParameter ('tag2' , $ tag2) -> ...; '. Tüm parametreleri bir kerede ayarlamak için 'setParameters' yöntemini de kullanabilirsiniz. – Czechnology

+1

Teşekkürler! Tam olarak bu soruyu yayınlamak için gidiyordu, ama bu mükemmel çalıştı – Matt

1

Sana (belgelerinden) Bu örneği adаpt düşünüyorum sorumu okumak ve düşünmek için zaman aldı!

+0

Uygulamamda çalışması için bunu alamadım. Yine de teşekkürler! Son çözümümü cevap olarak verdim. – Czechnology

+0

QueryBuilder yerine – user2019515