2015-09-14 4 views
3
$dataProvider = new ActiveDataProvider([ 
       'query' => UserProfile::find()->joinWith(['user'])->where(['<>', 'user.status', 0]), 
       'sort' => ['attributes' => ['fullname', 
         'phone', 
         'user.username' => [ 
          'asc' => ['user.username' => SORT_ASC], 
          'desc' => ['user.username' => SORT_DESC], 
          'default' => SORT_DESC 
         ], 
         'user.email' => [ 
          'asc' => ['user.email' => SORT_ASC], 
          'desc' => ['user.email' => SORT_DESC], 
          'default' => SORT_DESC 
         ], 
        ]] 
      ]); 

Сортировка по fullname и phone Работает хорошо. Но я хочу добавить сортировку по столбцам username и email.Yii 2.0: Сортировка по столбцу в GridView

, пожалуйста, исправьте меня.

Таблица пользователей и UserProfile имеет отношение. (user_profile.user_id = user.id)

<?= GridView::widget([ 
     'dataProvider' => $dataProvider, 
     'columns' => [ 
      ['class' => 'yii\grid\SerialColumn'], 
      [ 
       'label' => 'Username', 
       'value' => 'user.username', 
      ], 
      [ 
       'label' => 'Email', 
       'value' => 'user.email', 
      ], 
      'fullname', 
      'address', 
      'phone', 

      ['class' => 'yii\grid\ActionColumn'], 
     ], 
    ]); ?> 

ответ

3

Необходимо добавить следующий код. также добавить общедоступные переменные в поисковой модели. и использовать эти переменные в gridview как имя атрибута.

public $username, $email; 

public function rules() 
{ 
    return [ 
     [['username', 'email'], 'safe'], 
    ]; 
} 

$dataProvider = new ActiveDataProvider([ 
     'query' => UserProfile::find()->joinWith(['user'])->where(['<>', 'user.status', 0]), 
     'sort' => [ 
      'defaultOrder' => ['user.id' => SORT_DESC] 
     ], 
    ]); 

$dataProvider->sort->attributes['username'] = [ 
     'asc' => ['user.username' => SORT_ASC], 
     'desc' => ['user.username' => SORT_DESC], 
     ]; 
$dataProvider->sort->attributes['email'] = [ 
     'asc' => ['user.email' => SORT_ASC], 
     'desc' => ['user.email' => SORT_DESC], 
     ]; 

gridview код.

<?= GridView::widget([ 
    'dataProvider' => $dataProvider, 
    'columns' => [ 
     ['class' => 'yii\grid\SerialColumn'], 
     [ 
      'label' => 'Username', (if sort link not appear so, add comment label line) 
      'attribute' => 'username', 
      'value' => 'user.username', 
     ], 
     [ 
      'label' => 'Email', (if sort link not appear so, add comment label line) 
      'attribute' => 'email', 
      'value' => 'user.email', 
     ], 
     'fullname', 
     'address', 
     'phone', 

     ['class' => 'yii\grid\ActionColumn'], 
    ], 
]); ?> 
+0

У меня есть эта ошибка - неверный аргумент, предоставленный foreach() –

+0

Я обновил свои ан. Проверь это. – GAMITG

+0

У меня есть обновленный вопрос по коду сетки, я не использовал атрибут в любом месте. Что мне теперь делать..? –