I have a Gridview with data from a table which normally is ok as it is. But in some cases i have to manipulate the data, and i can't just do it from the query as there are many different cases and requires complex calculations.
Example: base data loaded from db:
date price buy_price
2019-05-01 15.75 10
2019-05-02 20.15 10.50
same data which passed through complex calculations
date price buy_price
2019-05-01 3.75 3
2019-05-02 4.70 3.10
I would like to use GridView cause the ajax filtering and sorting are really useful.
How can i manipulate the data AFTER the query the Gridview executes based on the DataProvider?
As an example in Yii2 Documentation about GridvViews says, you can manipulate any column to your need in the following way:
echo GridView::widget([
'dataProvider' => $dataProvider,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
// Simple columns defined by the data contained in $dataProvider.
'data',
[
'attribute' => 'price',
'value' => function ($model) {
return $model->getValue(); // Here you can manipulate the data as you wish.
},
],
[
'attribute' => 'buy_price',
'value' => function ($model) {
return $model->buy_price * 2; //Here you can manipulate the data as you wish.
},
],
],]);
After manipulating data, you can still use the sort or the ajax filtering.