Я боролся с фильтрацией CGridView с использованием соответствующей колонки модели, у меня есть две моделей автомобилей и цвет, поэтому цвет has_many автомобилей и автомобили belongs_to цвет. Столбец сетки из соответствующей модели отображается в порядке, я просто не могу фильтровать его. Я получаю ошибку MySQLYii, реляционная модель фильтр SERACH
Column not found: 1054 Unknown column 'carName'
Цвет модель HAS_MANY - Автомобили
Я declaired переменного $ carName от модели автомобиля, так что эта модель может увидеть его.
public $carName;
public function rules()
{
return array(
array('id, carName, colourName', 'safe', 'on'=>'search'),
)
}
public function relations()
{
return array(
'CarsObj'=>array(self::HAS_MANY, 'Cars', 'colourID')
);
}
public function search()
{
$criteria=new CDbCriteria;
$criteria->with = "CarsObj";
$criteria->compare('carName', $this->carName, true);
$criteria->compare('id',$this->id);
$criteria->compare('colourName',$this->colourName,true);
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
));
}
Модель автомобиля BELONGS_TO - Цвет
public function relations()
{
return array(
'ColourObj'=>array(self::BELONGS_TO, 'Colour', 'colourID')
);
}
CGridView, я с помощью поиска цвета модели, как мой DataProvider
$model = new Colour('search');
$data = $model->search();
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$data
,'filter'=>$model
,'pager'=>array('header'=>'')
,'columns'=>array(//related model column
'id',
'colourName',
array(
'header' => 'carName',
'type' => 'raw',
'name' => 'carName',
'value' => function($data, $row) { //$data is item of DataProvider, $row is number of row (starts from 0)
$carNames= CHtml::listData((array)$data->ColourObj, 'id', 'carName');
return implode(', ', $carNames);
}
)
Отличная !!, это решает мою проблему, спасибо ali @SiZE. Это сделало мой день, Это уже дало мне головную боль –