2

csqldataprovider で cgridview を使用しようとしました。

  1. 私のSQLクエリは、さまざまなテーブルからデータを取得します。クエリでエイリアスを使用していました。したがって、グリッドビューでヘッダー値をクリックすると、並べ替えに列名が必要です。つまり、column name = Trackクエリを作成しますが... order by Track、実際には作成する必要があります...order by t.trackname
  2. さらに複雑にするために、テーブル名としてテーブルに列名があります。たとえば、テーブル名Storeと列名をtrackid 持つ同じデータベースに、テーブル名を持つ同じデータベースに別のテーブルがありますtrackid
  3. 解決策を確認しました。ここで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]'),
),
4

1 に答える 1

1

namefor each column をCGridView正しく指定する必要があります。あなたのサンプルコードでは、間違って'name'=>'Case'ます'name'=>'caseid'name

アップデート:

  1. valueまた、フォーマットを行ったり、db から取得した値を変更したりしない場合は、この属性は必要ないことに注意してください。このname属性は、データベースの結果セットから正しい値を取得します。は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. 状況 1 と 2 を処理するには、SQL でエイリアスを使用し、これらのエイリアスの値をsortattributes配列と で使用し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、これはまったく問題ありません。

于 2012-12-02T16:28:34.117 に答える