Chr*_*ris 4 php sorting symfony doctrine-orm
我有一个使用Symfony 2并包含Doctrine 2实体的项目.其中一些实体彼此相关.此关联由注释定义:
/**
* @ORM\OneToMany(targetEntity="Event", mappedBy="firstEntityId" cascade={"persist", "remove"})
* @ORM\OrderBy({"dateEnd" = "DESC", "dateBegin" = "DESC"})
*/
private $events;
Run Code Online (Sandbox Code Playgroud)
如您所见,此关联包含多个具有开始和结束日期的事件.在检索此集合时,我希望最多的事件(即那些尚未结束或最近结束的事件)先排序.
当前方法的问题在于它将NULL在所有其他事件之后对结束日期进行排序.
如何告诉Doctrine以结束日期为NULL先排序事件,然后按降序结束日期对剩余事件进行排序?
到目前为止,我已经看到了几个关于如何告诉Doctrine如何订购实体的问题.但是,他们都没有提到注释.例如在Doctrine 2 Order By ASC中建议的反转符号的技巧和最后的Null值不起作用,因为Doctrine不接受除属性名称和/ ASC或DESC注释之外的任何内容.
小智 9
这是一篇旧帖子,但如果你使用的是doctrine查询构建器,我发现了一个非常简单的解决方案:
$sortDirection = 'ASC';
$qb = $this->createQueryBuilder('e');
$qb->addSelect('CASE WHEN e.valueToOrder IS NULL THEN 1 ELSE 0 END AS HIDDEN myValueIsNull');
//other stuffs
//$qb->where ...
$qb->orderBy('myValueIsNull','ASC');
$qb->addOrderBy('e.valueToOrder',':sortDirection');
$qb->setParameter(':sortDirection',$sortDirection);
return $qb->getQuery()->getResult();
Run Code Online (Sandbox Code Playgroud)
PHP的方式,除了慢一点,避免使用偏移(例如无限滚动)
| 归档时间: |
|
| 查看次数: |
3958 次 |
| 最近记录: |