Doctrine orm 原则2子查询中的限制

Doctrine orm 原则2子查询中的限制,doctrine-orm,subquery,limit,dql,Doctrine Orm,Subquery,Limit,Dql,我试图在Doctrine2中的in语句中使用子查询 以下是原始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个结果,然后在主查询中按名称排序 问题是我似乎无法限制

我试图在Doctrine2中的in语句中使用子查询

以下是原始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个结果,然后在主查询中按名称排序

问题是我似乎无法限制内部查询

以下是我当前的代码:

$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();
如您所见,我创建了第一个查询,对其进行排序和限制(通过自定义方法),然后尝试在第二个查询中使用它

但是,限制似乎不是DQL语句的一部分,因为当我var_转储第一个查询的DQL时,限制不存在,这意味着当我运行$qb2->getQuery()->getResult()时它被完全忽略

我通过启动第一个查询并在第二个查询中手动输入结果来实现这一点,但这很难看

你知道怎么做吗


谢谢

不幸的是,条令不支持对嵌套查询的限制。即使在内部QueryBuilder上使用2个QueryBuilder和setMaxResults(),它也将被忽略


此时执行此操作的唯一方法是运行两个单独的查询。

是否可以使用QueryBuilder的setMaxResults函数?是的,可以创建两个查询生成器,一个用于IN子选择,另一个用于全局DQL。在第一个例子中,使用
setMaxResults
。似乎DQL中不包含限制的主要原因是缓存-这里可能有一个解决方案请参阅我对类似问题的回答:这真的很不幸。我花了一个小时看我的代码,试图找出哪里出了问题。条令至少可以抛出一个异常,说它不受支持。将此标记为答案,因为虽然它没有帮助,但它确实证实了我的疑问,即它无法实现。这里可能有一个解决方案