ฉันต้องการแสดงคอลัมน์หมายเลขแถวที่สามารถกรองได้และเรียงลำดับได้ใน CGridView แต่สิ่งที่ฉันได้รับคือคอลัมน์ที่ว่างเปล่าที่สามารถจัดเรียงได้ (ส่วนหัวที่คลิกได้) และสามารถกรองได้ (มีช่องข้อความกรองด้านบนนั้น)
ในคลาสโมเดล (ActiveRecord) ฉันได้เพิ่มแอตทริบิวต์สาธารณะใหม่:
public $number;
ในฟังก์ชันกฎ () ฉันได้เพิ่ม:
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
ฉันหวังว่าจะมีคนช่วยฉันในการแก้ปัญหานี้