Как считать и группировать в 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');
Спасибо!
Ответы
Ответ 1
Решение:
$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()
.
Ответ 2
Вы можете получить счет, используя count() в списке "Запрос"
$leadCount = Lead::find()
->where(['approved'=>'1'])
->groupBy(['promoter_location_id', 'lead_type_id'])
->count();
Ссылка Ссылка для различных функций select query
Ответ 3
Если вас просто интересует счет, используйте yii\db\Query
, как упоминалось другими. Не требуется никаких изменений в вашей модели:
$leadsCount = (new yii\db\Query())
->from('lead')
->where('approved = 1')
->groupBy(['promoter_location_id', 'lead_type_id'])
->count();
Здесь ссылка на Документацию API Yii2
Ответ 4
Без добавления свойства $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();