Я пытаюсь сделать приложение Yii2.
У меня есть столбец «customerID», «customerName» и «total» в MySQL.
Я хочу показать пользователю общую стоимость выбранных клиентов.
Например.
Customer 1 = 100
Customer 2 = 250
Customer 3 = 300
Customer 1 = 300
Customer 3 = 500
Так. Если пользователь выберет Клиента 3 в моем выпадающем списке
Я хочу показать пользователю 300+ 500 = 800.
Я могу видеть сумму общих столбцов для конкретного клиента.
Но я не могу получить сумму всех столбцов выбранного клиента
Как я могу это сделать?
Это мой код ниже.
<?php $form = ActiveForm::begin(); ?>
<?php $chosen = ""; ?>
<?= $form->field($model, 'customerName')->dropDownList(
ArrayHelper::map(Siparisler::find()
->all(),'customerName','customerName'),
[
'prompt'=>'Chose a Customer'
]
);
$var = ArrayHelper::map(Siparisler::find()->where("(customerName = '$chosen' )")->all(),'total','total');
echo "<h3><br>"."Total"."<br><h3>";
$sum = 0;
foreach($var as $key=>$value)
{
$sum+= $value;
}
echo $sum;
?>
попробуй это. Это должно быть в действии вашего контроллера
public function actionTotal() {
//you've use $chosen for selected customer in drop down list
$chosen = Yii::$app->request->post('chosen', '');
// select all customer data based on $chosen
$customers = Siparisler::find()->where(['=', 'customerName', $chosen])
->all();
$sum = 0;
foreach($customers as $k=>$customer)
{
$sum += $customer->total;
}
return $this->render('total', [
'sum' => $sum,
'customers' => $customers,
]);
}
эти коды ниже должны быть на ваш взгляд
$form = ActiveForm::begin();
// i use yii\helpers\Html
Html::dropDownList('chosen', ArrayHelper::map(Siparisler::find()->all(), 'customerName', 'customerName'),
[
'prompt'=>'Chose a Customer'
]);
Html::submitButton('Submit');
ActiveForm::end();
echo "<h3><br>" . "Total" . "<br>" . $sum . "<h3>";
В дополнение к ответу Дэвида: суммирование по столбцу также может быть сделано в чистом SQL. Это может избавить вас от некоторой нежелательной сложности PHP (я стараюсь избегать ArrayHelper::map
когда я смогу). Запрос для этого будет
SELECT
sum(total) as sumTotal
FROM customer
WHERE customerName = '<NAME>';
или в Yii2:
Siparisler::find()->where(['customerName' => $chosenName])->sum('total');