如何在使用数据库函数的 Yii 中计算查询结果


How do I count the query results in Yii that uses a database function?

我尝试了以下方法

// find all keywords that have an uppercase
$upperKeywords = Keyword::find()->where('lower(keyword) != keyword')->orderBy('id');
echo "Found keyword with uppercase: ".$upperKeywords->count().PHP_EOL;
$count = (new Query())->select('count(*)')->from($upperKeywords)->scalar();

第一次计数尝试给出此错误:

Exception 'yii'db'Exception' with message 'SQLSTATE[42803]: Grouping error: 7 ERROR:  column "keyword.id" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: ...FROM "keyword" WHERE lower(keyword) != keyword ORDER BY "id"
                                                                   ^
The SQL being executed was: SELECT COUNT(*) FROM "keyword" WHERE lower(keyword) != keyword ORDER BY "id"'

第二次计数尝试给出此错误:

PHP Warning 'yii'base'ErrorException' with message 'trim() expects parameter 1 to be string, object given'
in /cygdrive/c/Users/Chloe/workspace/ShopWiz/vendor/yiisoft/yii2/db/Query.php:486
Stack trace:
#0 [internal function]: yii'base'ErrorHandler->handleError(2, 'trim() expects ...', '/cygdrive/c/Use...', 486, Array)
#1 /cygdrive/c/Users/Chloe/workspace/ShopWiz/vendor/yiisoft/yii2/db/Query.php(486): trim(Object(yii'db'ActiveQuery))

射击,我应该向下滚动更多。这奏效了。数组将其视为子查询,键值是表别名。

$count = (new Query())->select('count(*)')->from(['t' => $upperKeywords])->scalar();

http://www.yiiframework.com/doc-2.0/guide-db-query-builder.html#from