PHP Yii: cara penomoran baris CGridView jika menggunakan database sqlite

Saya ingin menampilkan kolom nomor baris yang dapat difilter dan diurutkan di CGridView, tetapi yang saya dapatkan hanyalah kolom kosong yang dapat diurutkan (tajuk yang dapat diklik) dan dapat difilter (memiliki kotak teks pemfilteran di atas sana).

Di kelas model (ActiveRecord) saya telah menambahkan atribut publik baru:

public $number;

dalam fungsi rule() saya telah menambahkan:

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

pada fungsi pencarian(), saya juga menambahkan:

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,
));
}

Saya berhasil menggunakan metode semacam ini untuk menambahkan kolom lain. Dengan kurangnya keterampilan dan pengetahuan tentang query sqlite, saya menduga penyebab masalah ini adalah query di $criteria->select.

Saya harap seseorang akan membantu saya untuk menyelesaikan ini.


person Indra Ginanjar    schedule 21.01.2014    source sumber


Jawaban (2)


Coba tambahkan properti ke CActiveRecord.attributeNames:

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

setelah mengedit pertanyaan saya, saya mengedit kode saya dan secara ajaib ternyata menjadi jawabannya.

Hapus saja alias tabel dari pernyataan pilih

Kode asli (tidak berfungsi):

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

Kode baru (berfungsi) setelah menghapus alias tabel:

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

Meskipun pertanyaan saya adalah tentang yii dengan database sqlite, tetapi karena ini pertanyaan yang cukup standar, saya rasa solusi ini juga akan berfungsi untuk yii dengan database mysql

person Indra Ginanjar    schedule 24.01.2014