Есть таблица
employees, у нее есть поле
department_id. В модели
Employees объявлена связь:
public function getDepartment()
{
return $this->hasOne(Management::className(), ['id' => 'department_id']);
}
В таблице
management хранятся имена
отделов (поле
value). Нужно посчитать количество
сотрудников по каждому
отделу. В результате нужен массив [[dep_name => count, dep_name2 => count2, ...]];.
На SQL у меня это выглядит так:
SELECT `management`.`value`, COUNT(*) FROM `employees` LEFT JOIN `management` ON `employees`.`department_id` = `management`.`id` GROUP BY `employees`.`department_id`
Есть ли возможность сделать это через
Employees::find() без дополнительных манипуляций(имею ввиду получить сначала количество сотрудников по каждому
department_id, а потом через
department_id получать имя отдела) и как это сделать?
РЕШЕНИЕ: ArrayHelper::map(Employees::find()
->select(['COUNT(*) AS count', 'value'])
->joinWith('department')
->groupBy('department_id')
->createCommand()
->queryAll(), 'value', 'count');