如何将其转换为Doctrine 2 QueryBuilder格式?

时间:2012-05-26 00:00:44

标签: symfony doctrine-orm

我想用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

2 个答案:

答案 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构建子查询,以避免遗漏字段错误。它并不完美,但似乎是一种可靠的解决方法。