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