2017-02-13 48 views
1

我有以下查詢:Yii2的GridView的SqlDataProvider排序不工作

$query = (new \yii\db\Query()) 
      ->select([ 
       'p.id', 
       'p.name', 
       'c.name AS contact_name', 
       'l.name AS laboratory', 
       'p.status', 
       'p.address', 
       'p.start_date', 
       'p.city', 
       'p.updated_at', 
       'stortbon.attribute_value as Stortbon', 
       'vrijgave.attribute_value as Vrijgave' 
      ]) 
      ->from(['project p']) 
      ->innerJoin('contact c', 'p.contact_id = c.id') 
      ->innerJoin('contact l', 'p.contact_id = l.id') 
      ->innerJoin(['stortbon' => $stortbon_query], 'p.id = stortbon.model_id') 
      ->innerJoin(['vrijgave' => $vrijgave_query], 'p.id = vrijgave.model_id'); 

,我使用的SqlDataProvider讓我在GridView結果:

$dataProvider = new SqlDataProvider([ 
     'sql' => $query->createCommand()->sql, 
     'totalCount' => $query->count(), 
     'key'  => 'id', 
     'sort' => [ 
      'attributes' => [ 
       'start_date' => [ 
        'asc' => ['start_date' => SORT_ASC], 
        'desc' => ['start_date' => SORT_DESC], 
        'default' => SORT_DESC, 
        'label' => 'Start Datum', 
       ], 
      ], 
     ], 
    ]); 

GridView和列:

  $columns[] = [ 
        'header' => Yii::t('project', 'Start date'), 
        'attribute' => 'start_date', 
        'format' => 'date', 
        'filter' => false, 
       ]; 

GridView::widget([ 
      'dataProvider' => $dataProvider, 
      'filterModel' => $searchModel, 
      'columns'  => $columns, 
     ]); 

我也嘗試將名稱更改爲p.start_date,但它顯示了gridview但不是排序,但是噸/標題鏈接排序的數據升序或降序

+2

請詳細說明。 「不能工作」是什麼意思?你會得到什麼錯誤?你期望的行爲是什麼? –

+0

它顯示的是gridview,而不是排序按鈕/標題鏈接來排序數據降序或升序 – user3021615

+0

編輯主帖 – user3021615

回答

1

在的GridView控件刪除該過濾器的模型,因爲你不能用searchmodel

GridView::widget([ 
    'dataProvider' => $dataProvider, 
    'columns'  => $columns, 
]); 

結合了的SqlDataProvider和使可用的短路在的SqlDataProvider網格列 你必須在短陣列中聲明

$dataProvider = new SqlDataProvider([ 
    'sql' => $query->createCommand()->sql, 
    'totalCount' => $query->count(), 
    'key'  => 'id', 
    'sort' => [ 
     'defaultOrder' => ['start_date'=>SORT_DESC], 
     'attributes' => [ 
      'start_date', 
      'status', 
      'address', 
      ], 
     ], 
    ], 
]); 
+0

filtermodel正在工作。默認順序也是有效的,當我添加?排序= -start_date或?排序= start_date它也可以,但我沒有像我通常會得到一個可點擊的標題 – user3021615

+0

在gridview列數組而不是標題'header'=> Yii: :t('project','開始日期'),替換爲'label'=> Yii :: t('project','開始日期') – vasillis