php - 如何使用注解在 Doctrine 2 集合上首先排序 NULL 值?

标签 php symfony sorting doctrine-orm

我有一个使用 Symfony 2 并包含 Doctrine 2 实体的项目。其中一些实体彼此相关。该关联由注释定义:

/**
 * @ORM\OneToMany(targetEntity="Event", mappedBy="firstEntityId" cascade={"persist", "remove"})
 * @ORM\OrderBy({"dateEnd" = "DESC", "dateBegin" = "DESC"})
*/
private $events;

如您所见,此关联包含多个具有开始日期和结束日期的事件。检索此集合时,我希望首先对最近发生的事件(即尚未结束或最近结束的事件)进行排序。

当前方法的问题是它将结束日期为 NULL 的事件排在所有其他事件之后。

我如何告诉 Doctrine 先对结束日期为 NULL 的事件进行排序,然后按结束日期降序对剩余事件进行排序?

到目前为止,我已经在 SO 上看到了几个关于如何告诉 Doctrine 如何订购实体的问题。但是,他们都没有提到注释。按照建议反转符号的技巧,例如在 Doctrine 2 Order By ASC and Null values in last不起作用,因为 Doctrine 不接受除属性名称和注释中的 ASCDESC 以外的任何内容。

最佳答案

这是一篇旧文章,但如果您使用的是学说查询构建器,我发现了一个非常简单的解决方案:

$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();

PHP 方式,除了速度较慢之外,避免使用偏移量(例如无限滚动)

感谢https://stackoverflow.com/a/23420682/6376420

关于php - 如何使用注解在 Doctrine 2 集合上首先排序 NULL 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28852390/

相关文章:

symfony - 使用 nginx 对符号链接(symbolic link)静态文件的更新无效

php - socket_create_listen 不适用于 Windows 中的所有接口(interface)

php - 如何检查变量是否是 DOMDocument 对象?

php - Laravel 使用ajax get请求清除 session 数据

php - Laravel 扩展 TestResponse 类

php - Symfony - 重置数据库的最佳实践

php - Django/mod_wsgi 和 PHP 作为虚拟主机在同一个 Apache 服务器上使用 MAMP

c# - 根据字符串位置对字符串数组进行排序 (C#)

javascript - 在 JavaScript 中对网格数据进行排序。排序函数出错

c++ - 使用第二列对二维数组进行排序 C++