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');
这对我有用。
我有两个实体:"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');
这对我有用。