PHP Yii: как нумеровать строки CGridView при использовании базы данных sqlite

Я хочу показать фильтруемый и сортируемый столбец с номером строки в 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.

Я надеюсь, что кто-то поможет мне решить эту проблему.


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