[英]Decorate a row or field in Yii CGridView if database shows a certain value
[英]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.