小程府 2016-12-02 17:06:37 3290次浏览 0条评论 7 1 0

之前有个问题一直挺困扰的,就是yii2的gridview实现的列表,列表头部可以实现排序功能,甚是好用,但是在使用hasOne联查的时候,排序就不好用了,今天终于解决这个问题了,代码如下:
控制器:

public function actionList()
{
    $where['storeid'] = $this->storeid;
    $where['status'] = [Table::STATUS_NORMAL, Table::STATUS_PEND];
    $model = new ActiveDataProvider([
            'query' => Table::find()->where($where)->with(
                [
                    'tableType'=>function($query){
                        $query->andWhere(['status'=>Table::STATUS_NORMAL,'storeid'=>$this->storeid]);
                    },
                    'area'=>function($query){
                        $query->andWhere(['status'=>Table::STATUS_NORMAL,'storeid'=>$this->storeid]);
                    },
                ]
            ),
        'pagination' => [
            'pageSize' => 10,
        ],
    ]);

    //添加以下代码,自定义排序
    $model->setSort([
        'attributes' => [     
            'area.areaname' => [
                'asc' => ['areaid' => SORT_ASC],
                'desc' => ['areaid' => SORT_DESC],
                'label' => '餐桌楼层'
            ],
            'tablenum'=>[
                'asc'=>['tablenum'=>SORT_ASC],
                'desc' => ['tablenum' => SORT_DESC],
                'label' => '餐桌排序'
            ]
        ]
    ]);

    return $this->render('list', [
        'model' => $model,
    ]);
}

视图:

'columns' => [
    [
        'class' => 'yii\grid\CheckboxColumn'
    ], //复选框列
    'id',
    'tablenum',
    [
        'label'=>'餐桌名称','value'=>'tablename'
    ],
    'area.areaname',  //这里的名称会调用area模型中的attribute
],

这样就可以了!

觉得很赞
    没有找到数据。
您需要登录后才可以评论。登录 | 立即注册