2015-03-30 5 views
1

Это мой GridView:Yii GridView сортировать по связанной колонке

$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. Как я могу это сделать ?

ОБНОВЛЕНИЕ: Я обновил поля критериев. Повторите попытку.

ответ

0

Это приятный и типичный вопрос. Разработчики всегда должны иметь сортировку на столбцах соответствующей таблицы в CGridView. Ниже я подробно объяснил, как вы можете это сделать. Также я рекомендую вам изменить заголовок вопроса для лучшей индексации поисковыми системами: Yii gridView сортировать по соответствующей колонке.

Прежде всего, необходимо добавить эти строки в начале 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 : ""', 
     ), 
+0

thx для справки. но я получил это: свойство «CDataColumn.hameder» не определено. Это работает: массив ( \t \t 'имя' => 'имя', \t \t 'типа' => 'HTML', \t \t 'значение' => '$ данных-> user-> имени', \t \t), но если бы я нажал на столбец, ничего не произошло –

+0

«user.name» представляет имя столбца из моей таблицы? –

+0

Я обновил поля критериев, пожалуйста, проверьте его снова :) –

Смежные вопросы