查询生成器中的多个按顺序排序?

时间:2018-01-29 19:52:03

标签: php symfony doctrine-orm

我有一个Symfony 3项目。我正在向查询构建器发送一个不同长度的数组。查询构建器如下所示:

function findByQuery($sortBy) {
    return $this->createQueryBuilder('d')
                    ->leftJoin('d.cat', 'dc')
                    ->leftJoin('d.dog', 'dd')
                    ->leftJoin('d.rabbit', 'rr')
                    ->getQuery()
                    ->execute();

}

我想使用$ sortBy参数来排序结果。然而问题是,有时$ sortBy(它是一个数组)有时只包含一个带有键的元素和一个通过设置(例如ASC或DESC)的顺序,而其他时候将包含几个键。无论哪种情况,我都希望能够按所有元素对结果进行排序。有一种简单的方法吗?

非常感谢,

1 个答案:

答案 0 :(得分:1)

这很简单:

$sortBy = [
    'd.property1'  => 'ASC',
    'd.property2'  => 'DESC'
];

function findByQuery(array $sortBy) {
    // create QueryBuilder
    $qb = $this->createQueryBuilder('d')
        ->leftJoin('d.cat', 'dc')
        ->leftJoin('d.dog', 'dd')
        ->leftJoin('d.rabbit', 'rr');

    foreach ($sortBy as $property => $dir) {
        $qb->addOrderBy($property, $dir);
    }

    return $qb->getQuery()
        ->execute();
}