Как узнать сумму значений при связях в моделях?

есть модели Goods и Rating связаны они так

public function getRatings(){
            return $this->hasMany(Rating::className(),['id_gods'=>'id']);
        }


могу ли я узнать сумму поля quantity и общее количество записей и как это можно узнать ?
  • Вопрос задан
  • 48 просмотров
Решения вопроса 1
qonand
@qonand
Software Engineer
по сути дела Вам нужно вычислять агрегируемые поля. Этот вопрос подобно описан в документации, например здесь
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
mhthnz
@mhthnz
PHP, YII2, Golang, Linux
Не испытывал, но может быть как то так:
$data = $model->getRatings()
->select('count(rating.*), SUM(rating.quantity)')
->alias('rating')
->createCommand()
->queryOne();

Или просто по массиву пробежаться циклом:
$ratings = $model->ratings;
$count = $sum = 0;
if (is_array($ratings)) {
	$count = count($ratings);
	foreach($ratings as $rating) {
		$sum += (int) $rating->quantity;
	}
}
echo $count, $sum;
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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