我想用Doctrine编写嵌套查询;示例SQL如下所示:
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
我在转换 SECOND SELECT
声明时遇到问题。
提前致谢。
我希望createQueryBuilder
而不是createQuery
。
答案 0 :(得分:34)
试试这个:
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();
$query->select('l')
->from('yourBundle:Layer', 'l')
->where($query->expr()->notIn('l.id', $subquery))
....;
我测试了它并且它有效:)
答案 1 :(得分:1)
A.aitboudad的答案对我有用,但我需要直接使用DQL构建子查询,以避免遗漏字段错误。它并不完美,但似乎是一种可靠的解决方法。