如何解决TYPO3:使用TYPO3 Querybuilder在OrderBy中使用IS NULL和COALESCE
我想使用查询
SELECT `uid` FROM `machines` ORDER BY NOT ISNULL(`changed`),`changed` DESC
在我的控制器中。 为此,我使用如下的querybuilder:
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('forklifts');
$statement = $queryBuilder
->select('*')
->from('machines');
我试图以这种方式添加ORDERBY:
$statement->orderBy("NOT ISNULL(`changed`)");
$statement->addOrderBy("changed","DESC");
但这不起作用。 可以在TYPO3 Querybuilder中执行此操作,还是对此问题有其他解决方案?
解决方法
您可以使用QueryBuilder::add()
来绕过此限制:
$queryBuilder->add(
'orderBy',$queryBuilder->expr()->isNotNull('changed'),true
);
$queryBuilder->addOrderBy('changed','DESC');
这基本上是QueryBuilder::addOrderBy()
内部执行的操作,但没有自动引用标识符。请注意,此处使用ExpressionBuilder
而不是普通的SQL代码段,以确保changed
字段名仍然被引用,即使作为约束的一部分。
感谢Mathias向正确的方向推动我。
中expr()->not()
未被列为TYPO3 querybuilder的方法。
但是
expr()->isNotNull()
存在。
这将起作用:
$queryBuilder->add(
'orderBy','DESC');
再次感谢您
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。