VladOsadchyi
@VladOsadchyi
Студент

Как посчитать количество записей с помощью ActiveQuery?

Есть таблица 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');
  • Вопрос задан
  • 63 просмотра
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Попробуйте так:
Employees::find()
    ->select(['COUNT(*) AS depcount'])
    ->joinWith('department')
    ->groupBy('department_id')
    ->all();

только добавьте в модель
public $depcount;
или если не нужен объект, то можно проще
Employees::find()
    ->select(['COUNT(*) AS depcount'])
    ->joinWith('department')
    ->groupBy('department_id')
    ->createCommand()
    ->queryAll();
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы