PHP Yii: วิธีกำหนดหมายเลขแถว CGridView หากใช้ฐานข้อมูล sqlite

ฉันต้องการแสดงคอลัมน์หมายเลขแถวที่สามารถกรองได้และเรียงลำดับได้ใน 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

ฉันหวังว่าจะมีคนช่วยฉันในการแก้ปัญหานี้


person Indra Ginanjar    schedule 21.01.2014    source แหล่งที่มา


คำตอบ (2)


ลองเพิ่มคุณสมบัติใน CActiveRecord.attributeNames:

public function attributeNames()
{
    return array_merge(parent::attributeNames(), array('number'));
}
person Jorge Barata    schedule 21.01.2014

หลังจากแก้ไขคำถามแล้ว ฉันได้แก้ไขโค้ดแฟชั่นที่กลายเป็นคำตอบอย่างน่าอัศจรรย์

เพียงลบนามแฝงของตารางออกจากคำสั่ง 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 ด้วย

person Indra Ginanjar    schedule 24.01.2014