Подтвердить что ты не робот

Доктрина 2 предел IN в подзапросе

Я пытаюсь использовать подзапрос в инструкции IN в Doctrine2.

Вот какой должен выглядеть исходный SQL-запрос:

SELECT * FROM license 
WHERE id 
IN (SELECT id 
    FROM license 
    WHERE subscription = x 
    ORDER BY date DESC
    LIMIT 5)
ORDER BY name ASC;

То, что я хочу сделать, это отобразить 5 последних результатов, упорядоченных по имени, поэтому я должен сначала запросить последние 5 результатов, а затем заказать по имени в основном запросе.

Проблема заключается в том, что я не могу показать LIMIT внутренний запрос.

Вот мой текущий код:

$qb = $this->createQueryBuilder('l');
$qb->select('l.id');
$qb = $this->whereSubscriptionId($qb, $subscription_id);
$qb = $this->offsetLimitOrder($qb, 0, 5, 'deliveryDatetime desc');

//Second Query, adds the "order by X"
$qb2 = $this->createQueryBuilder('l2');
$qb2->add('where', $qb2->expr()->in('l2.id', $qb->getQuery()->getDQL()));
if(isset($order)){
    $order = explode(' ', $order);
    $qb2->addOrderBy('l2.'.$order[0], $order[1]);
 }

 return $qb2->getQuery()
            ->getResult();

Как вы можете видеть, я создаю свой первый запрос, я заказываю и ограничиваю его (с помощью настраиваемого метода), а затем я пытаюсь использовать его во втором запросе.

Однако кажется, что LIMIT не является частью инструкции DQL, потому что когда я var_dump первый запрос DQL, LIMIT отсутствует, что означает, что он полностью игнорируется при запуске $qb2- > getQuery() → getResult();

Я запустил его, запустив первый запрос и вручную введя результаты во втором, но это уродливо.

Любая идея о том, как это сделать правильно?

Спасибо!

4b9b3361

Ответ 1

К сожалению, Doctrine не поддерживает ограничение на вложенные запросы. Даже если вы используете 2 QueryBuilders и setMaxResults() во внутреннем QueryBuilder, это просто будет проигнорировано.

Единственный способ сделать это в это время - запустить 2 отдельных запроса.