Как считать и группировать в yii2

Я хотел бы сгенерировать следующий запрос с помощью 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(); 

Что генерирует этот запрос:

 SELECT COUNT(*) FROM (SELECT * FROM `lead` WHERE approved = 1 GROUP BY `promoter_location_id`, `lead_type_id`) `c` 

В yii 1.x я бы сделал следующее:

 $criteria = new CDbCriteria(); $criteria->select = 'COUNT(*) AS cnt'; $criteria->group = array('promoter_location_id', 'lead_type_id'); 

Благодаря!

Решение:

 $leadsCount = Lead::find() ->select(['COUNT(*) AS cnt']) ->where('approved = 1') ->groupBy(['promoter_location_id', 'lead_type_id']) ->all(); 

и добавить public $cnt к модели, в моем случае Lead.

Как сказал Kshitiz, вы также можете использовать yii\db\Query::createCommand() .

Если вас просто интересует счет, используйте yii\db\Query как упоминалось другими. Не требуется никаких изменений в вашей модели:

 $leadsCount = (new yii\db\Query()) ->from('lead') ->where('approved = 1') ->groupBy(['promoter_location_id', 'lead_type_id']) ->count(); 

Вот ссылка на документацию API Yii2

Вы можете получить счет, используя count () в списке Query

 $leadCount = Lead::find() ->where(['approved'=>'1']) ->groupBy(['promoter_location_id', 'lead_type_id']) ->count(); 

Ссылка ссылки для различных функций выбора запроса

Без добавления свойства $cnt в модель

 $leadsCount = Lead::find() ->select(['promoter_location_id', 'lead_type_id','COUNT(*) AS cnt']) ->where('approved = 1') ->groupBy(['promoter_location_id', 'lead_type_id']) ->createCommand()->queryAll();