【问题标题】:Yii gridView sort on related columnYii gridView 对相关列进行排序
【发布时间】:2015-03-30 11:38:52
【问题描述】:

这是我的网格视图:

 $this->widget('GridView', array(
    'id'=>'subscribers',
    'enableExport' => true,
    'export'=>'payments',
    'dataProvider'=>$model->search(),
    'columns'=>array(
            array(
                'name'=>'name',
                'type'=>'html',
                'value'=>'$data->user->name',
            ),
            array(
                'name'=>'city',
                'type'=>'html',
                'value'=>'is_object($data->user->location) ? $data->user->location->city->name : ""',
            ),
)
);

这是模型的内容:

$criteria=new CDbCriteria;
    $criteria->with = array('subgym');
    $criteria->compare('id',$this->id);
    $criteria->compare('user_id',$this->user_id);
    $criteria->compare('contribution',$this->contribution);
    $criteria->compare('abtype_id',$this->abtype_id);
    $criteria->compare('gym_id',$gym_id);
    $criteria->compare('has_companion',$this->has_companion,true);
    $criteria->compare('companion',$this->companion,true);
    $criteria->compare('companion_abtype',$this->companion_abtype);
    $criteria->compare('subgym.city_id', $this->cityId);

    if ($this->location != '') {
        $criteria->join = "left join users usr on usr.id = t.user_id  join locations loc on loc.id = usr.location_id";
        $criteria->compare('loc.id', $this->location);
        //$criteria->compare('loc.city_id', $this->city, true);
    }

    $criteria->compare('value_paid',$this->value_paid);
    $criteria->compare('month',$sub_month);
    $criteria->compare('year',$sub_year);
    $criteria->compare('paid',$this->paid);
   $criteria->order = 't.id desc';
        $sort = new CSort;
        $sort->defaultOrder = 'user_id ASC';

        return new CActiveDataProvider($this, array(
            'criteria'=>$criteria,
            'pagination' => array(    
                 'pageSize' => 20,
            ),   
            'sort' => $sort,
        ));

这是控制器:

$model = new FitnessSubscriber('search');
 $this->render('index', array(
            'model' => $model,
        ));

我想对列名和列城市 desc 或 asc 进行排序。我怎样才能做到这一点 ?

更新:我更新了标准字段。请再次检查。

【问题讨论】:

    标签: php gridview yii


    【解决方案1】:

    这是一个很好的典型问题。开发者总是需要在 CGridView 中对相关表格的列进行排序。下面我已经详细解释了如何做到这一点。另外我建议您修改问题的标题,以便搜索引擎更好地索引:Yii gridView sort on related column

    首先你需要在FitnessSubscriber模型的开头添加这些行:

    public $user_name;
    public $user_location;
    

    之后,修改$model->search()如下:

    $criteria=new CDbCriteria;
        $criteria->with = array('subgym');
        $criteria->compare('id',$this->id);
        $criteria->compare('user_id',$this->user_id);
        $criteria->compare('contribution',$this->contribution);
        .......
    
        return new CActiveDataProvider($this, array(
            'criteria'=>$criteria,
            'pagination' => array(    
                 'pageSize' => 20,
            ),   
            'sort' => array(
                'defaultOrder' => 't.id ASC',
                'attributes' => array(
                    'user_name' => array(
                        'asc' => 'user.name',
                        'desc' => 'user.name DESC',
                    ),
                    'user_location' => array(
                        'asc' => 'user.location',
                        'desc' => 'user.location DESC',
                    ),
                    '*',
                ),
            ),
        ));
    

    最后修改你的视图如下:

    'columns'=>array(
            array(
                'header'="Username"
                'name'=>'user_name',
                'type'=>'html',
                'value'=>'$data->user->name',
            ),
            array(
                'header'=>"City"
                'name'=>'user_location',
                'type'=>'html',
                'value'=>'is_object($data->user->location) ? $data->user->location->city->name : ""',
            ),
    

    【讨论】:

    • 感谢您的帮助。但我得到了这个:属性“CDataColumn.hameder”没有定义。这有效:array('name'=>'name', 'type'=>'html', 'value'=>'$data->user->name', ),但是如果我单击该列,则没有任何反应
    • "user.name" 代表我表中的列名?
    • 我更新了条件字段,请再次检查:)
    • 抱歉我的错误,hameder 是错误的,header 是正确的。我将编辑我的答案。
    • user.name 引用来自user 关系的name 字段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-23
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    相关资源
    最近更新 更多