Делаю радел статистики. Статистика динамическая, из таблиц базы данных MYSQL.
На Active Record, с использованием связей, такие запросы я знаю как сделать. Так как эти связи нужны только для этой статистики, то не хотелось бы захламлять доменную сущность не нужными ей связями. Отсюда возник вопрос как отказаться вообще от AR и построить такой запрос на Query Builder?
Вот пример запроса с использованием AR:
Код: Выделить всё
$query = Certification::find()
->alias('c')
->select([
'c.id',
'c.user_id',
'c.category_id',
'TRIM(CONCAT_WS(\' \', p.last_name, p.name)) as user_name',
'COUNT(DISTINCT appointment.event_id) as appointment_count',
'category.name as categoryName'
])
->joinWith([
'profile as p' => function (ActiveQuery $query) {
$query->select(['p.user_id']);
},
'appointments' => function (AppointmentQuery $query) {
$query->appointed();
},
'category' => function (ActiveQuery $query) {
$query->select(['category.id', 'category.name']);
},
])
->andWhere(['category.role' => Certification::ROLE_JUDGE])
->andWhere('FROM_UNIXTIME(appointment.from_at, \'%Y\') = :year', [':year' => $year])
->active(true)
->valid(true)
->addGroupBy('appointment.user_id')
->addOrderBy('categoryName DESC')
->limit($limit && 0 < $limit && $limit < 1000 ? $limit : 1000)
->asArray();
Код: Выделить всё
(new Query())->from('certification') ....
Благодарю за помощь!