2012-12-02 53 views
2

我曾試圖用cgridview與csqldataprovider列名。Yii的,排序和CsqlDataProvider

  1. 我的SQL查詢不同表中獲取數據。我在查詢中使用了別名。所以在gridview中,當我點擊標題值時,它需要列名進行排序。即column name = Track它將創建與... order by Track查詢,但實際上它應該創建...order by t.trackname
  2. 要增加更多的複雜性,我有表的表名列名。 E.g與表名Store和col名trackid相同的分貝我有同樣的分貝另一個表與表名trackid
  3. 我測試過solution。在cgridview中,當我指定我的列屬性時,它不會變得可排序(無錨標籤)。沒有列屬性它是可分類的。

在控制器文件,

$dataProvider=new CSqlDataProvider($query, array(
     'totalItemCount'=>$count, 
     'sort'=>array('defaultOrder'=>'caseid DESC', 
      'attributes'=>array(
      'caseid', 
      'trackid', 
      'status', 
      ), 
     ), 
     )); 

鑑於文件,

$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$dataProvider, 
'ajaxUpdate'=>true, 
'columns'=>array(
    array('header'=>'Case','name'=>'Case','value'=>'$data[caseid]'), 
    array('header'=>'Track','name'=>'Track','value'=>'$data[trackid]'), 
    array('header'=>'Status','name'=>'Status','value'=>'$data[status]'), 
), 
+0

你能證明你的'$ query'? –

回答

1

你必須正確地指定爲nameCGridView每一列。在你的示例代碼中,它是不正確的,你已經使用'name'=>'Case'而它應該是'name'=>'caseid',即name的值應該是確切值的別名您指定在您的SQL。

更新:

  1. 還要注意的是櫃面你沒有做任何格式,或修改從數據庫中檢索到的值,你不需要value屬性。 name屬性將負責從db結果集中獲取正確的值。 header將負責顯示列標題名稱,在您的情況下是Case

    實施例:

    'columns'=>array(
        array('header'=>'Case','name'=>'caseid'), // 'value'=>'$data[caseid]'), 
        array('header'=>'Track','name'=>'trackid'), // 'value'=>'$data[trackid]'), 
        array('header'=>'Status','name'=>'status'), // 'value'=>'$data[status]'), 
    ), 
    
  2. 要在SQL處理的情況1和2中使用的別名(ES),以及在sort值的attributes陣列使用這些別名,並且還在name

    SQL示例:

    select t.trackname as some_alias ... 
    

    數據提供程序:

    'sort'=>array(
        'attributes'=>array(
         'some_alias', 
         // ... more attributes ... 
        ), 
        // ... more options ... 
    ), 
    

    CGridView:您排序,生成查詢時

    'columns'=>array(
        array(
         'header'=>'Some Header Name', 
         'name'=>'some_alias', 
         'value'=>'$data["some_alias"]' // as mentioned above this is unnecessary if you are not modifying the value 
        ) 
    ) 
    

    所以會像:order by some_alias,這是完全正常的。

+0

這應該可以解決你的問題。做評論,讓我知道它是如何運作的。 –

+0

做了一些編輯,現在你所有的問題都覆蓋了 –

+1

它解決了我的問題。謝謝。 – Netro