繁体   English   中英

PHP Yii:如果使用sqlite数据库,如何对CGridView行编号

[英]PHP Yii: how to row numbering CGridView if using sqlite database

我想在CGridView中显示行号的可过滤和可排序列,但是我所得到的只是一个空的可排序(可单击标题)和可过滤(它具有过滤文本框)列。

在模型(ActiveRecord)类中,我添加了一个新的公共属性:

public $number;

在rules()函数中,我添加了:

public function rules()
{
    return array(
        ...
        ...
        array('
            ...
            ...
            number,
            ',
            'safe',
            'on'=>'search'
        ),
    );
}

在search()函数上,我还添加了:

public function search()
{
$criteria=new CDbCriteria;
...
...
$number_select = '( 
    select count(*)
    from tbl_mytable as k
    where k.id <= t.id
    )';
$criteria->select = array(
    $number_select . ' as number',
    't.*',
    );
...
...
$criteria->compare($number_select, $this->number,true);
$sort = new CSort;
$sort->attributes = array(
    '*',
    ...
    ...
    'number'=>array(),
    );

return new CActiveDataProvider($this, array(
    'criteria'=>$criteria,
    'sort'=>$sort,
));
}

我已经成功使用这种方法添加其他列。 由于缺乏sqlite查询的技能和知识,我怀疑造成此问题的原因是$criteria->select的查询。

我希望有人能帮助我解决这个问题。

尝试将属性添加到CActiveRecord.attributeNames

public function attributeNames()
{
    return array_merge(parent::attributeNames(), array('number'));
}

在编辑完我的问题之后,我编辑了我的代码,这真是奇迹般地成为了答案。

只需从select语句中删除表别名

原始(无效)代码:

$number_select = '( 
    select count(*)
    from tbl_mytable as k
    where k.id <= t.id
    )';

删除表别名后的新(工作)代码:

$number_select = '( 
    select count(*)
    from tbl_mytable
    where tbl_mytable.id <= t.id
    )';

虽然我的问题是关于使用sqlite数据库的yii,但是由于这是非常标准的查询,我认为此解决方案也将适用于使用mysql数据库的yii。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM