Прочитал тонну топиков по CGridView, но толком почти ничего и не сделал. В общем есть две модели связанные марки машин(Brands) и модели машин(Models). У моделей есть поле brand_id которое связано с id в модели марки. Нужно сделать так что бы при выводе в гриде моделей, автоматически подставлялось имя марки вместо id-шника. Это у меня получилось, но почему то пагинатор нормально не работает, при нажатии допустим третьей страницы получаем такой url
site.ru/cms/dB/show/requestParams/Models_page/3
Тут же нажимаем 4-ую страницу и получаем вот такой url
site.ru/cms/dB/show/requestParams/Models_page/4/requestParams/Models_page/3/
ну и так далее, url все время растет.
Тоже самое происходит когда пытаешься отфильтровать по какому-нибудь столбцу, там воообще с url что-то странное
site.ru/cms/dB/show?Models[id]=&Models[name]=patrol&Models[brand_search]=&Models_page=1
Вот так настроена модель Models
public function rules()
{
$parentRules = parent::rules();
$rules = array(
array( 'id, name,brand_search', 'safe', 'on'=>'search' ),
);
return array_merge($parentRules, $rules);
}
public function search()
{
$criteria = new CDbCriteria;
$criteria->with = array('brand');
$criteria->compare( 'brand.name', $this->brand_search, true );
return new CActiveDataProvider( 'Models', array(
'criteria'=>$criteria,
'sort'=>array(
'attributes'=>array(
'brand_search'=>array(
'asc'=>'brand.name',
'desc'=>'brand.name DESC',
),
'*',
),
),
'pagination' => array(
'pageSize' => Yii::app()->params['perPage'],
),
));
}
Это контроллер
public function actionShow()
{
$model = new Models;
$this->render('show', array(
'model'=>$model,
));
}
Это вьюха
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$model->search(),
'filter'=>$model,
'ajaxUpdate' => false,
'columns'=>array(
'id',
'name',
array( 'header'=>'Марка', 'name'=>'brand_search', 'value'=>'$data->brand->name' ),
array(
'class'=>'CButtonColumn',
),
),
Где я чего не так сделал?