Yii2: как использовать функцию sum с find()?

#sql #yii2 #sum

#sql #yii2 #сумма

Вопрос:

У меня есть функция поиска в моей модели CarsSearch, которую я использую в виджете GridView:

 $query = Cars::find();
  

Теперь мне нужно добавить функцию SQL SUM к этой функции find, но она не работает. ИТАК, я попытался показать SQL-запрос, и я получил эту ошибку:

 $query = Cars::find()->sum('price');
echo $query->createCommand()->sql; // Call to a member function createCommand() on integer
  

Ответ №1:

Метод ActiveQuery::sum() выполняет SQL-запрос и уже возвращает его результат. Вам не нужно больше ничего с этим делать.

 echo Cars::find()->sum('price');
  

Это выведет сумму цены столбца для всех строк в таблице.

Если вы хотите добавить некоторые условия или другие вещи, вам нужно сделать это перед вызовом sum() метода.

 echo Cars::find()->where(['category' => 'SUV'])->sum('price')
  

Это выведет сумму цены для всех автомобилей с «SUV» в качестве их категории.

Если вам нужно использовать SUM() функцию sql для одного столбца в запросе, выбирая больше столбцов, вы не можете использовать ActiveQuery::sum() метод. Вместо этого вы можете использовать select() addSelect() метод or, чтобы указать запросу, какие столбцы вы хотите выбрать.

 $query = Cars::find()
    ->select([
        'sumPrices' => 'SUM(price)',
        'countCars' => 'COUNT(*)'
    ]);
  

Смотрите Документацию для получения дополнительной информации.