查询生成器中的多个 Order By 语句?
Posted
技术标签:
【中文标题】查询生成器中的多个 Order By 语句?【英文标题】:Multiple Order By Statements in Query Builder? 【发布时间】:2018-01-29 19:52:03 【问题描述】:我有一个 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),而其他时候将包含多个键。无论哪种情况,我都希望能够按所有元素对结果进行排序。有没有一种简单的方法可以做到这一点?
非常感谢,
【问题讨论】:
您可以在调用getQuery()
之前将QueryBuilder
实例分配给一个变量,然后使用简单的foreach()
,您可以根据需要多次调用addOrderBy()
方法,并且最后返回类似$builder->getQuery()->execute()
。
抱歉,我不完全理解如何使用 addOrderBy 方法做到这一点?
【参考方案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();
【讨论】:
可能数组键需要与表别名如d.property1
以上是关于查询生成器中的多个 Order By 语句?的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 查询生成器 order by 不适用于左连接
若SQL语句中的ORDER BY短语中指定了多个字段,则( )。
使用DISTINCT时,LINQ to SQL不生成ORDER BY?
如何在 select 语句中包含 PERCENTILE_CONT 列,而不会生成有关 ORDER BY 子句或聚合函数的错误?