#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(*)'
]);
Смотрите Документацию для получения дополнительной информации.