2012-05-26 13 views
10

Doctrine ile iç içe geçmiş sorgu yazmak istiyorum; Numune SQL aşağıda gibidir:Doctrine 2 QueryBuilder biçimine nasıl dönüştürülür?

SELECT * FROM layer WHERE layer.id NOT IN 
       (SELECT task_id FROM users_tasks WHERE user_id = 1) 
AND parent_id IS NOT NULL AND leaf IS TRUE 

Ben İKİNCİSELECT deyimi dönüştürme sorun var.

Şimdiden teşekkürler.

createQuery ürününü createQueryBuilder ile yapmak isterim.

1)

$subquery = $this->_em->createQueryBuilder() 
     ->select('t.id') 
     ->from('yourBundle:Task', 't') 
       ->innerjoin('t.user','u') 
       ->where('u.id = 1') 
     ->getDQL(); 

2) sonra test ettim Sorgunuzla

$query = $this->_em->createQueryBuilder() 
       ->select('l') 
       ->from('yourBundle:Layer', 'l') 
      ->where($query->expr()->notIn('l.id', $subquery)) 
       ....; 

oluşturmak için alt sorgu oluşturma ve işe yarıyor :)

cevap

29

bu deneyin aitboudad'ın cevabı benim için çalıştı, ancak eksik alanlardan kaçınmak için doğrudan DQL kullanarak alt soruyu oluşturmam gerekiyordu. rrors. Mükemmel değil ama güvenilir bir çözüm gibi görünüyor.

+0

"createQueryBuilder" ile olanı isterim; – PMoubed

+0

Sorguyu değiştiriyorum (yukarıdaki detaylar) –

+0

Çalışıyor. Teşekkürler. – PMoubed

1

A.:

İlgili konular