CakePHP 3 高级查询 Not Null 出现奇怪的 "QueryExpression" 错误?
CakePHP 3 advanced Query Not Null with strange "QueryExpression" error?
我在我的应用程序中组合了一个小型邮件应用程序,运行 出现了一个奇怪的错误 - 即使只是按照高级查询的说明进行操作。我需要 - 只是 - 名为的邮箱:
$CoreMailboxes = TableRegistry::get('CoreMailboxes');
$query = $CoreMailboxes->find()
->where(function (QueryExpression $exp, Query $q) {
return $exp->isNotNull('name');
});
$query->hydrate(false);
return $query->toArray();
这与 Cake Cookbook 中的示例几乎完全相同,没有 "hydrate: false"。但是,它给我一个
的错误
Argument 1 passed to App\Model\Table\CoreMailboxesTable::App\Model\Table\{closure}() must be an instance of App\Model\Table\QueryExpression, instance of Cake\Database\Expression\QueryExpression given
Cookbook 中的查询是这样的:
$query = $cities->find()
->where(function (QueryExpression $exp, Query $q) {
return $exp->isNotNull('population');
});
我做错了什么?
问题出在第一个参数的实例定义上,doc 很清楚:
The passed anonymous function will receive an instance of \Cake\Database\Expression\QueryExpression as its first argument, and \Cake\ORM\Query as its second
也许你没有为这个 class 设置正确的命名空间,试试这个:
<?php
use \Cake\Database\Expression\QueryExpression as QueryExp;
//more code
//more code
->where(function (QueryExp $exp, Query $q) {
//more code
这么简单的查询不需要使用查询表达式..
你可以把 'IS NOT NULL' 放在哪里...
现在 re-use 查询并创建一个更有用的 finder(),表达式可能更有用
$result = $this->Table->find()
->where([
'TableName.column_name IS NOT NULL'
])->toArray();
我今天遇到了同样的错误。
尝试添加
use Cake\ORM\Query;
use Cake\Database\Expression\QueryExpression;
在控制器的开头。这对我有帮助。
我也尝试了 kip 的回答,但它在我的情况下不起作用
我在我的应用程序中组合了一个小型邮件应用程序,运行 出现了一个奇怪的错误 - 即使只是按照高级查询的说明进行操作。我需要 - 只是 - 名为的邮箱:
$CoreMailboxes = TableRegistry::get('CoreMailboxes');
$query = $CoreMailboxes->find()
->where(function (QueryExpression $exp, Query $q) {
return $exp->isNotNull('name');
});
$query->hydrate(false);
return $query->toArray();
这与 Cake Cookbook 中的示例几乎完全相同,没有 "hydrate: false"。但是,它给我一个
的错误 Argument 1 passed to App\Model\Table\CoreMailboxesTable::App\Model\Table\{closure}() must be an instance of App\Model\Table\QueryExpression, instance of Cake\Database\Expression\QueryExpression given
Cookbook 中的查询是这样的:
$query = $cities->find()
->where(function (QueryExpression $exp, Query $q) {
return $exp->isNotNull('population');
});
我做错了什么?
问题出在第一个参数的实例定义上,doc 很清楚:
The passed anonymous function will receive an instance of \Cake\Database\Expression\QueryExpression as its first argument, and \Cake\ORM\Query as its second
也许你没有为这个 class 设置正确的命名空间,试试这个:
<?php
use \Cake\Database\Expression\QueryExpression as QueryExp;
//more code
//more code
->where(function (QueryExp $exp, Query $q) {
//more code
这么简单的查询不需要使用查询表达式.. 你可以把 'IS NOT NULL' 放在哪里... 现在 re-use 查询并创建一个更有用的 finder(),表达式可能更有用
$result = $this->Table->find()
->where([
'TableName.column_name IS NOT NULL'
])->toArray();
我今天遇到了同样的错误。 尝试添加
use Cake\ORM\Query;
use Cake\Database\Expression\QueryExpression;
在控制器的开头。这对我有帮助。 我也尝试了 kip 的回答,但它在我的情况下不起作用