Yii2:根据属性

时间:2016-04-26 15:39:31

标签: mysql gridview yii2

我是Yii2的新手。 我是我的观点我想显示两个标签,列出同一个表中的数据,但根据列的内容显示不同的属性。

例如,我有一个表BOOK具有id,名称,autor,颜色,发布日期和价格。 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',
                            ],
                             ],
                    ]),
    ],
],

]); ?&GT;

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

2 个答案:

答案 0 :(得分:1)

您可以使用函数值属性为网格视图中的模型值返回每个字段的正确值,例如:对于颜色,您可以测试年份是否>然后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;
                                    },
                        ],
                    ],
                ]),

答案 1 :(得分:0)

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