csqldataprovider で cgridview を使用しようとしました。
- 私のSQLクエリは、さまざまなテーブルからデータを取得します。クエリでエイリアスを使用していました。したがって、グリッドビューでヘッダー値をクリックすると、並べ替えに列名が必要です。つまり、
column name = Track
クエリを作成しますが... order by Track
、実際には作成する必要があります...order by t.trackname
。 - さらに複雑にするために、テーブル名としてテーブルに列名があります。たとえば、テーブル名
Store
と列名をtrackid
持つ同じデータベースに、テーブル名を持つ同じデータベースに別のテーブルがありますtrackid
。 - 解決策を確認しました。ここでcgridviewで列属性を指定すると、ソート可能になりません(アンカータグなし)。column 属性がなければ、ソート可能です。
コントローラーファイルでは、
$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]'),
),