я пытаюсь вычислить сумму запроса groupby и отправить это значение в представление в yii2. мой текущий код получает и отображает правильную группировку, но сумма не работает.
вот код контроллера:
public function actionIndex()
{
if( Yii::$app->request->post('search') )
{
$from = Yii::$app->request->post('from');
$to = Yii::$app->request->post('to');
switch( Yii::$app->request->post('activity') )
{
case 'bills':
$searchModel = new Bill();
$query = $searchModel::find();
$query->where(['BETWEEN', 'teis_bill_purchase_date', $from, $to]);
// The problem is in the below sum
$query->joinWith('inventory');
$query->groupBy('teis_inventory_id');
$query->sum('teis_bill_override_cbm');
$query->all();
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
'show_results' => 1
]);
break;
}
}
return $this->render('index');
}
У меня есть различные типы инвентаря, и каждый инвентарь имеет несколько счетов. Я пытаюсь создать отчет, который получает количество счетов между определенным диапазоном дат ($ от, $ до), группирует их по типу инвентаря, суммирует значения каждого типа и отображает эти значения для этого типа.
вот мой код вида:
if( isset($show_results) )
{
print(GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
[
'attribute'=>'teis_bill_id',
'value'=>'teis_bill_id',
],
'inventory.teis_inventory_type',
'teis_bill_pieces',
'teis_bill_override_cbm',
'teis_bill_sale_price',
'teis_bill_profit',
['class' => 'yii\grid\ActionColumn'],
],
]));
}
Я включил код для представления, так как я не знаю, как отобразить эту сумму, как только я ее получу!
любая помощь будет оценена.
благодарю вас!
Я думаю, что проблема связана с совмещением sum('teis_bill_override_cbm')
поля
попробуйте выбрать ваши поля и в качестве суммы использовать сумму (‘teis_bill_override_cbm’) как teis_bill_override_cbm
$searchModel = new Bill();
$query = $searchModel::find();
$query->select('teis_bill_id, inventory.teis_inventory_type,
sum(teis_bill_override_cbm ) as teis_bill_override_cbm,
teis_bill_pieces, teis_bill_sale_price, teis_bill_profit');
$query->where(['BETWEEN', 'teis_bill_purchase_date', $from, $to]);
// The problem is in the below sum
$query->joinWith('inventory');
$query->groupBy('teis_inventory_id');
//$query->sum('teis_bill_override_cbm'); already calculated
$query->all();
Проблема здесь в том, что $query->all()
возвращает результат в виде массива, но результат не сохраняется ни в одной переменной.
Пытаться $var = $query->all();
вместо этого, чтобы результат выполненного оператора был сохранен.