微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

TYPO3:使用TYPO3 Querybuilder在OrderBy中使用IS NULL和COALESCE

如何解决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向正确的方向推动我。

在TYPO3文档https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ApiOverview/Database/ExpressionBuilder/Index.html

expr()->not()

未被列为TYPO3 querybuilder的方法。

但是

expr()->isNotNull()

存在。

这将起作用:

$queryBuilder->add(
    'orderBy','DESC');

再次感谢您

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。