Sonata admin createQuery 忽略排序表达式中的 table 别名

Sonata admin createQuery ignores table alias in sort expression

我有两个实体:"OriginNews" 和 "FollowUpNews"。它们是一对多的关系,所以一个 OriginNews 可以有多个 FollowUpNews。

在我的 OriginNewsAdmin 中,我只想在列表视图中显示 OriginNews,但也由 FollowUpNews 订购(如果已连接)...所以我决定通过像这样更改 createQueryMethod 来操作我的 listView 数据。

 /**
 * @param string $context
 * @return ProxyQueryInterface
 */
public function createQuery($context = 'list')
{
    $query = parent::createQuery($context);

    $query->leftJoin('o.followUpNews', 'fun')
        ->addSelect('COALESCE(fun.importDate, o.importDate) AS HIDDEN sortDate')
        ->addOrderBy('sortDate');

    return $query;
}

这应该将 followUpNews 加入到 originNews 并按导入日期排序...当我 运行 这个时,我会得到错误。

An exception has been thrown during the rendering of a template ("[Semantical Error] line 0, col 94 near 'sortDate ASC,': Error: 'sortDate' is not defined.").

奏鸣曲管理员在开玩笑吗?我在上面的一行定义了 sortDate 字段......即使我删除了 "HIDDEN" 关键字......没有变化! 问题出在哪里?

我的目标是,始终将 OriginNews 置于顶部,其中包含最新的 FollowUpNews ... 是否可以通过其他方式实现?

谢谢

我花了几个小时搜索我的问题,发现这只是一个多年来一直存在的学说错误...

我 运行 遇到了与此处所述相同的问题

Doctrine Querybuilder ORDER BY clause is not in SELECT list

我还通过将 sql 模式设置为 null 来解决此问题。我还安装了学说扩展以按子句顺序使用 IFNULL 函数。

我的sql现在看起来像下面

$query->leftJoin('o.followUpNews', 'fun')
    ->addOrderBy(IFNULL('fun.importDate', 'o.importDate'), 'DESC');

这对我有用。