【问题标题】:Yii, Sort and column name in CsqlDataProviderYii,CsqlDataProvider中的排序和列名
【发布时间】:2012-11-20 01:48:44
【问题描述】:

我曾尝试将 cgridview 与 csqldataprovider 一起使用。

  1. 我的 sql 查询从不同的表中获取数据。我在查询中使用了别名。所以在gridview中,当我点击标题值时,它会使用列名进行排序。即column name = Track 它将使用... order by Track 创建查询,但实际上它应该创建...order by t.trackname
  2. 为了增加复杂性,我将表中的列名作为表名。例如,在同一个数据库中,表名Store 和列名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]'),
),

【问题讨论】:

  • 你能显示你的$query吗?

标签: php yii


【解决方案1】:

您必须为CGridView 的每一列正确指定name。在您的示例代码中它是不正确的,您使用了 'name'=>'Case' 而它应该是 'name'=>'caseid' ,即 name 的值应该是 aliasexact 值> 你在你的 sql 中指定。

更新:

  1. 另外请注意,如果您没有进行任何格式化或修改从 db 检索的值,则不需要 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. 要处理情况 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,这非常好。

【讨论】:

  • 这应该可以解决您的问题。做评论,让我知道结果如何。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-02
相关资源
最近更新 更多