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

时间:2014-01-21 10:12:09

标签: php sqlite yii

我想在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中的查询。

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

2 个答案:

答案 0 :(得分:0)

尝试将该属性添加到CActiveRecord.attributeNames

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

答案 1 :(得分:0)

在编辑了我的问题后,我编辑了一段时间奇迹般地成为答案的代码。

  

只需从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
    )';

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