Как преобразовать это в формат Doctrine 2 QueryBuilder?

Я хотел бы написать вложенный запрос с помощью 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 not createQuery.

Ответ 1

попробуйте следующее:

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))
              ....;

Я тестировал его, и он работает:)

Ответ 2

Ответ A.aitboudad работал у меня, но мне нужно было создать подзапрос, используя DQL, чтобы избежать ошибок поля. Это не идеально, но кажется надежным решением.