2017-04-17 5 views
3

問題があります:グリッドビューをソートできません。私が見ることができるURLで enter image description here :?インデックスソート= -product_nameが、何も起こりません、私は "製品名" をクリックします

。私はCRUDジェネレータを使用しませんでした。

コントローラYii2グリッドビューソート

public function actionIndex() 
{ 
    $searchModel = new CompanyProductSearch(); 
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams); 
    return $this->render('index', [ 
     'dataProvider' => $dataProvider, 
     'searchModel' => $searchModel, 
    ]); 
} 

SearchModel

public $searchstring; 

public function rules() 
{ 
    return [ 
     [['date', 'product_name', 'searchstring'], 'safe'], 
    ]; 
} 


public function scenarios() 
{ 
    return Model::scenarios(); 
} 


public function search($params) 
{ 
    $array = array(); 
    $user = Yii::$app->user->identity; 
    $product_influencer = ProductInfluencer::find()->all(); 
    foreach($product_influencer as $product){ 
     $array[] .= $product->product_id; 
    } 
    $query = Product::find()->where(['company_id'=>$user->company_id]) 
     ->andWhere(['id'=>$array]) 
     ->andWhere(['is not', 'shop_price', null]) 
     ->andWhere(['is not', 'main_category_id', null]) 
     ->orderBy('date DESC'); 

    $dataProvider = new ActiveDataProvider([ 
     'query' => $query, 
     'pagination' => [ 
      'pageSize' => 10 
     ], 
    ]); 

    $dataProvider->sort->attributes['product_name'] = [ 
     'asc' => ['product_name' => SORT_ASC], 
     'desc' => ['product_name' => SORT_DESC], 
    ]; 



    $this->load($params); 

    if (!$this->validate()) { 
     return $dataProvider; 
    } 

    $query->andFilterWhere([ 
     'product_name' => $this->product_name, 
    ]); 


    $query->andFilterWhere(['like', 'product_name', $this->searchstring]); 

    return $dataProvider; 
} 

ビュー

<?php Pjax::begin(); ?> 
<?= GridView::widget([ 
    'summary'=>"", 
    'dataProvider' => $dataProvider, 
    'tableOptions' => [ 
     'class' => 'table table-responsive', 
     'id' => 'sortable-table', 
    ], 
    'pager' => [ 
     'class' => 'common\widgets\CustomPager', 
     'prevPageLabel' => '<div style="border: none" class="glyphicon glyphicon-menu-left"></div>', 
     'nextPageLabel' => '<div style="border: none" class="glyphicon glyphicon-menu-right"></div>', 
     'maxButtonCount' => 0, 
    ], 
    'columns' => [ 
     ['class' => 'yii\grid\CheckboxColumn',], 
     [ 
      'class' => 'yii\grid\SerialColumn', 
      'header' => 'Nr.', 
     ], 
     [ 
      'format' => 'raw', 
      'label' => 'Product name', 
      'attribute' => 'product_name', 
      'value' => function($model){ 
       return Html::a($model->product_name, ['detail-product'], ['data' => [ 
        'params'=>['id'=>$model->id], 
        'method' => 'get', 
       ]]); 
      } 
     ], 
     [ 
      'label' => 'Total earnings', 
      'value' => function($model){ 
       return '$ 950 (test)'; 
      } 
     ], 
     [ 
      'label' => 'Units available', 
      'value' => function($model){ 
       $units = \common\models\ProductInfo::findOne(['product_id'=>$model->id]); 
       return $units->shop_units; 
      } 
     ], 
    ], 
]); ?> 
<?php Pjax::end(); ?> 

ありがとう!

+0

'$ array []。= $ product-> product_id;'内のドットを削除します。 – lubosdz

+0

削除済み、まだ動作しません – Viskas

答えて

8

これは、すでにクエリで並べ替えが設定されているためです。 dataproviderはこれを無効にすることはできません。クエリ内のorderBy句を削除する必要があります。

通常、どのような属性をソートできるかを明確にするため、このようにデータプロバイダでソートを設定することをお勧めします。

$dataProvider->setSort([ 
     'attributes' => [ 
      'product_name' => [ 
       'asc' => ['product_name' => SORT_ASC], 
       'desc' => ['product_name' => SORT_DESC], 
       'default' => SORT_ASC 
      ], 
      'date' => [ 
       'asc' => ['date' => SORT_ASC], 
       'desc' => ['date' => SORT_DESC], 
       'default' => SORT_ASC, 
      ], 
     ], 
     'defaultOrder' => [ 
      'date' => SORT_ASC 
     ] 
    ]); 
+0

ありがとうございます! – Viskas