我想使用yii2生成以下查询:
SELECT COUNT(*) AS cnt FROM lead WHERE approved = 1 GROUP BY promoter_location_id, lead_type_id
我试过了:
$leadsCount = Lead::find()
->where('approved = 1')
->groupBy(['promoter_location_id', 'lead_type_id'])
->count();
Run Code Online (Sandbox Code Playgroud)
哪个生成此查询:
SELECT COUNT(*) FROM (SELECT * FROM `lead` WHERE approved = 1 GROUP BY `promoter_location_id`, `lead_type_id`) `c`
Run Code Online (Sandbox Code Playgroud)
在yii 1.x中我会做以下事情:
$criteria = new CDbCriteria();
$criteria->select = 'COUNT(*) AS cnt';
$criteria->group = array('promoter_location_id', 'lead_type_id');
Run Code Online (Sandbox Code Playgroud)
谢谢!
dea*_*acs 26
解:
$leadsCount = Lead::find()
->select(['COUNT(*) AS cnt'])
->where('approved = 1')
->groupBy(['promoter_location_id', 'lead_type_id'])
->all();
Run Code Online (Sandbox Code Playgroud)
并添加public $cnt
到模型,在我的情况下铅.
正如Kshitiz所说,你也可以使用yii\db\Query::createCommand()
.
您可以使用select Query中的count()来获取计数
$leadCount = Lead::find()
->where(['approved'=>'1'])
->groupBy(['promoter_location_id', 'lead_type_id'])
->count();
Run Code Online (Sandbox Code Playgroud)
参考链接用于选择查询的各种功能
小智 8
如果您只对计数感兴趣,请yii\db\Query
按照其他人的说法使用.不需要对您的模型进行任何更改:
$leadsCount = (new yii\db\Query())
->from('lead')
->where('approved = 1')
->groupBy(['promoter_location_id', 'lead_type_id'])
->count();
Run Code Online (Sandbox Code Playgroud)
这是Yii2 API文档的链接