2012-05-26 41 views
10

我想用Doctrine編寫嵌套查詢;樣本SQL是象下面這樣:如何將其轉換爲Doctrine 2 QueryBuilder格式?

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 

我有問題轉換第二SELECT聲明。

在此先感謝。我想用createQueryBuilder而不是createQuery

回答

29

試試這個:

1)創建子查詢

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

2)後創建查詢

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

我測試了它和它的作品:)

+0

我想用'createQueryBuilder'; – PMoubed

+0

我修改查詢(上面的細節) –

+0

它的工作原理。謝謝。 – PMoubed

1

A. aitboudad的答案適用於我,但我需要直接使用DQL構建子查詢,以避免缺少字段e rrors。這並不完美,但似乎是一個可靠的解決方法。

相關問題