【问题标题】:Yii2: Show GridView results based on attributesYii2:根据属性显示GridView结果
【发布时间】:2016-04-26 15:39:31
【问题描述】:

我是 Yii2 的新手。 我是我的观点我想显示两个选项卡,列出来自同一个表的数据,但根据列的内容显示不同的属性。

例如,我有一个带有 id、名称、作者、颜色、发布日期和价格的表 BOOK。 Book Table 在我看来,我有那个代码。

 <?=    Tabs::widget([
'items' => [
    [
        'label' => 'New Books',
        'content' =>  GridView::widget([
                        'dataProvider' => $dataProvider,
                        'filterModel' => $searchModel,
                        'columns' => [
                            [
                                'label' => 'Book Name',
                                'attribute' => 'book_name',
                                'value' => 'book_name',
                            ],

                        ],
                    ]),
    ],
    [
        'label' => 'Old Books',
        'content' => GridView::widget([
                        'dataProvider' => $dataProviderOld,
                        'filterModel' => $searchOldModel,
                        'columns' => [
                            ['class' => 'yii\grid\SerialColumn'],

                            //'id',
                            [
                                'label' => 'Book Color',
                                'attribute' => 'book_color',
                                'value' => 'book_color',
                            ],
                             ],
                    ]),
    ],
],

]); ?>

目前我正在使用两个不同的模型和两个不同的查询来做这件事。 (我不知道我最终是否会使用两个不同的模型,或者我会将两者合并为一个)。 是否有一种简单的方法(使用相同的模型和相同的查询)来选择基于 Book 列显示的属性? 例如,对于 10 多年前发行的书籍,我只想显示颜色。对于其他书籍,我只想显示名称(这只是一个简化的示例)。 或者只有一个模型和模型搜索,还有另一种更简单的方法吗? 谢谢

【问题讨论】:

    标签: mysql gridview yii2


    【解决方案1】:

    您可以使用UNION SELECT 查询创建 ActiveDataProvider。示例见this quastion

    【讨论】:

      【解决方案2】:

      您可以使用 value 属性中的函数为每个字段返回正确的值,具体取决于直接在 gridview 中的模型值,例如:对于颜色,您可以测试年份是否 > 然后 2000 并返回您喜欢的值.. 等等为其他人开列

                   GridView::widget([
                          'dataProvider' => $dataProvider,
                          'filterModel' => $searchModel,
                          'columns' => [
                              [
                                  'label' => 'Book Name',
                                  'attribute' => 'book_name',
                                  'value' => 'book_name',
                              ],
                              [
                                  'label' => 'Color',
                                  'attribute' => 'color',
                                  'value' =>  function($model){
                                          if ($model->year) > '2000' {
                                              return '';
                                          } else {
                                              return $model->color;
                                          },
                              ],
                          ],
                      ]),
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多