首页 > 解决方案 > 动态更新存储库查询

问题描述

我在存储库中创建了一个查询。由于通过函数发送的参数,我想更改此查询中的一些元素(例如 where 条件、排序等)。

此函数有效并返回数据:

public function dashboardIndex($offset, $limit, $order)
{
    $query = $this->createQueryBuilder('v')
    ->setFirstResult($offset)
    ->setMaxResults($limit)         
    ->getQuery()
    ->getResult()
    ;
    return $query;
}

添加动态“addOrderBy”不起作用并且它不返回数据

public function dashboardIndex($offset, $limit, $order)
{
    $query = $this->createQueryBuilder('v');
    
    /* Sort dynamically  $order = ['column1' => 'ASC', 'column2' => DESC, ...] */
    foreach($order as $column => $direction){
        $query->addOrderBy('v.'.$column , $direction);
    }       
    /* Sort dynamically */
    
    $query->setFirstResult($offset)
    ->setMaxResults($limit)         
    ->getQuery()
    ->getResult()
    ;
    return $query;
}

“createQueryBuilder”返回一个对象,但不能在函数中一直修改它吗?

标签: phpdoctrine-orm

解决方案


明显的陈述是显而易见的:

要返回查询结果,您必须返回查询结果。

因此return $query;不返回结果,而是返回查询。

更好的:

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


推荐阅读