2012-05-26 23 views
10

Tôi muốn viết truy vấn lồng nhau với Doctrine; SQL mẫu là như dưới đây:Làm thế nào để chuyển đổi nó sang định dạng 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 

Tôi có vấn đề chuyển đổi THỨ HAISELECT tuyên bố .

Xin cảm ơn trước.

Tôi muốn thực hiện với createQueryBuilder không createQuery.

Trả lời

29

thử điều này:

1) tạo subquery bạn

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

2) sau khi tạo truy vấn của bạn

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

Tôi đã thử nghiệm nó và nó hoạt động :)

+0

Tôi muốn cái có 'createQueryBuilder'; – PMoubed

+0

Tôi sửa đổi truy vấn (chi tiết ở trên) –

+0

Nó hoạt động. Cảm ơn. – PMoubed

1

A. Câu trả lời của aitboudad làm việc cho tôi, nhưng tôi cần phải xây dựng truy vấn phụ bằng DQL trực tiếp để tránh trường bị thiếu rương. Nó không hoàn hảo nhưng có vẻ là một giải pháp đáng tin cậy.

Các vấn đề liên quan