【问题标题】:Manipulating data after gridview query in YiiYii中gridview查询后操作数据
【发布时间】:2019-05-02 07:41:04
【问题描述】:

我有一个 Gridview,其中包含来自表的数据,这通常是可以的。 但在某些情况下,我必须对数据进行操作,而我不能只从查询中进行操作,因为有许多不同的情况并且需要复杂的计算。

示例: 从 db 加载的基础数据:

date        price   buy_price
2019-05-01  15.75   10
2019-05-02  20.15   10.50

经过复杂计算的相同数据

date        price   buy_price
2019-05-01  3.75   3
2019-05-02  4.70   3.10

我想使用 GridView,因为 ajax 过滤和排序非常有用。

如何在 Gridview 基于 DataProvider 执行查询后操作数据?

【问题讨论】:

  • 如果您想在执行查询之后对数据进行一些操作,排序和过滤可能无法正常工作,因为它是在查询级别完成的,所以在您操作之前(与网格视图显示的值不同的值将用于过滤)。
  • 是的,但用户能够过滤的字段将是唯一不会被处理的字段(例如日期)。无论如何感谢您的建议。

标签: php gridview yii2


【解决方案1】:

作为Yii2 Documentation about GridvViews 中的示例,您可以通过以下方式根据需要操作任何列:

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.
        },
    ],
],]); 

操作数据后,你仍然可以使用排序或ajax过滤。

【讨论】:

  • 可以工作。问题是:属性可以在回调函数内部进行操作吗?因为对于每个模型,我都会有一些需要乘以或除以的值。在您的示例中,您使用 3 和 2,在我的情况下,我必须计算这些数字,它将用于多个模型属性。
  • 从你所说的,我想有某种功能,比如$model->getValueOfSomething()。在这种情况下,您可以在匿名函数中调用该 getter 函数。
猜你喜欢
  • 2014-04-13
  • 2013-11-20
  • 1970-01-01
  • 1970-01-01
  • 2012-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-22
相关资源
最近更新 更多