Yii2:将来自Sql的数据显示在Kartik网格视图的一列中,该数据具有相同的值

时间:2016-12-27 12:54:02

标签: php mysql gridview yii2 kartik-v

我正在尝试使用Yii2框架开发系统。 我在我的数据库中有数据,我想显示products表中的所有数据。例如:

产品表

---------------------------------------------------------------------
**id** | **product** | **color**   | **quantity**   |    **size**   |

  1    |    t-shirt  |     red     |       2        |     L         | 
  2    |    t-shirt  |     blue    |       3        |     M         |
  3    |    pants    |     black   |       6        |     M         |

我想在index.php中将此数据显示给 kartik gridview 。但我希望按product而不是id显示数据,因此我的预期结果就像我的 index.php

预期结果

product   |   quantity    |   

 t-shirt  |      5        |   
 pants    |      6        | 

我的预期结果避免,颜色和大小。它将所有相同的产品合并到gridview中的一列中。

我怎么能这样? 这是我在 index.php

中的代码
  <?php
   use kartik\grid\GridView;

  <?= GridView::widget([
    'dataProvider' => $dataProvider,
    'columns' => [
        ['class' => 'yii\grid\SerialColumn',
            'header' => 'No',
        ],
        [
            'label' => 'product',
            'value' => function($data) {
               return $data->product;
            }
        ],

        [
            'label' => 'quantity',
            'value' => function($data) {
               return $data->quantity;
            }
        ],
        ['class' => 'yii\grid\ActionColumn'],
    ],
    'toolbar' => [
        ['content' =>
            Html::a('<i class="glyphicon glyphicon-repeat"></i>', ['index'], ['data-pjax' => false, 'class' => 'btn btn-default', 'title' => 'Reset Grid'])
        ],
        '{export}',
        '{toggleData}'
    ],
    'panel' => [
        'heading' => '<i class="glyphicon glyphicon-align-left"></i>&nbsp;&nbsp;<b>Products List</b>',
        'before' => '', //IMPORTANT
    ],
]);
?>

如果我使用上面的代码,我得到的结果如下:

    product   |   quantity    |   

     t-shirt  |      2        |
     t-shirt  |      3        |     
     pants    |      6        | 

任何帮助将不胜感激。感谢

1 个答案:

答案 0 :(得分:0)

使用: http://www.yiiframework.com/doc-2.0/yii-data-sqldataprovider.html

在sql中使用group by,count ect ...

然后在GridView列中使用如下:

[
    'label' => 'product',
    'value' => function($data) {
        return $data['product'];
    },
],