问题描述
我写的..
$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注射!
另见