Doctrine Sonata admin createQuery忽略排序表达式中的表别名
我有两个实体:“原创新闻”和“后续新闻”。它们是一对多相关的,因此一条原创新闻可以有多条后续新闻 在我的OriginNewsAdmin中,我只想在listview中显示OriginNews,还想按FollowUpNews排序(如果已连接)。。。因此,我决定通过如下更改createQueryMethod来操作我的listView数据Doctrine Sonata admin createQuery忽略排序表达式中的表别名,doctrine,sonata-admin,dql,Doctrine,Sonata Admin,Dql,我有两个实体:“原创新闻”和“后续新闻”。它们是一对多相关的,因此一条原创新闻可以有多条后续新闻 在我的OriginNewsAdmin中,我只想在listview中显示OriginNews,还想按FollowUpNews排序(如果已连接)。。。因此,我决定通过如下更改createQueryMethod来操作我的listView数据 /** * @param string $context * @return ProxyQueryInterface */ public function c
/**
* @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;
}
这应该加入后续新闻到原始新闻,并按导入日期排序。。。当我运行这个时,我会得到错误
在呈现模板期间引发了异常
(“[Semantic Error]第0行,第94列靠近'sortDate ASC':错误:
“sortDate”未定义。“)
奏鸣曲管理员在开玩笑吗?我在上面一行定义了sortDate字段。。。即使我删除了“隐藏”关键字。。。没有变化!
问题在哪里
我的目标是,总是把最新的后续新闻放在最上面。。。这在另一方面可能吗
感谢大家花了几个小时来搜索我的问题,我发现这是一个简单的理论错误,已经存在了好几年了 我遇到了和这里描述的相同的问题 我还解决了将sql模式设置为null的问题。我还安装了条令扩展,以便在ORDERBY子句中使用IFNULL函数 我的sql现在看起来如下所示
$query->leftJoin('o.followUpNews', 'fun')
->addOrderBy(IFNULL('fun.importDate', 'o.importDate'), 'DESC');
这对我很有用