如何解决我如何在 CakePHP 3.9使用 Postgres的查询构建器中执行 ORDER BY xxxx DESC NULLS FIRST或 LAST
我写的..
$query->order([
'updated_at' => 'DESC NULL LAST',]);
然后...
2021-04-07 16:34:58 Notice: Deprecated (16384): Passing extra sort expressions by associative array is deprecated. Use QueryExpression or numeric array instead. - /var/www/shokunin3/vendor/cakePHP/cakePHP/src/Database/Expression/QueryExpression.PHP,line: 173
You can disable deprecation warnings by setting `Error.errorLevel` to `E_ALL & ~E_USER_DEPRECATED` in your config/app.PHP. in [/var/www/shokunin3/vendor/cakePHP/cakePHP/src/Core/functions.PHP,line 311]
Request URL: /hogehoge
Client IP: 192.168.1.1
Trace:
Cake\Error\BaseErrorHandler::handleError() - CORE/src/Error/BaseErrorHandler.PHP,line 168
deprecationWarning - CORE/src/Core/functions.PHP,line 311
Cake\Database\Expression\OrderByExpression::_addConditions() - CORE/src/Database/Expression/OrderByExpression.PHP,line 72
Cake\Database\Expression\QueryExpression::add() - CORE/src/Database/Expression/QueryExpression.PHP,line 173
Cake\Database\Query::_conjugate() - CORE/src/Database/Query.PHP,line 2260
Cake\Database\Query::order() - CORE/src/Database/Query.PHP,line 1191
App\Controller\FooController::bar() - APP/Controller/FooController.PHP,line 999
...
我该怎么写?
对不起,我的英语蹩脚...
解决方法
正如错误消息所暗示的那样,您可以为可以编写任意 SQL 的方向传递一个表达式:
$query->order([
'updated_at' => $query->newExpr('DESC NULLS LAST'),]);
$query->order(function (\Cake\Database\Expression\QueryExpression $exp) {
return [
'updated_at' => $exp->add('DESC NULLS LAST'),];
});
或者您可以传递非关联数组条目,即单个字符串或表达式(但不支持自动标识符引用):
$query->order([
'updated_at DESC NULLS LAST',]);
$query->order(function (\Cake\Database\Expression\QueryExpression $exp) {
return [
$exp->add('updated_at DESC NULLS LAST'),];
});
在任何情况下,请确保您不要在非关联值或表达式中插入用户数据,因为它们是按原样插入到查询中的,即它们很容易出现 SQL注射!
另见
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。