Я искал и искал ответ на мою проблему, но ни один из них не помог.Моя проблема связана с фильтрацией / поиском в CGridView для Yii.
В моей модели заявителя у меня есть следующее:
private $_city = null;
private $province_id = null;
public function getCity()
{
if($this->_city === null && $this->address_id !== null) {
$this->_city = $this->address->city;
}
return $this->_city;
}
public function setCity($value)
{
$this->_city = $value;
}
public function search()
{
// Warning: Please modify the following code to remove attributes that
// should not be searched.
$criteria=new CDbCriteria;
$criteria->with = array('address'=>array('alias'=>'address'));
$criteria->compare('id',$this->id);
$criteria->compare('phn',$this->phn);
$criteria->compare('gender',$this->gender);
$criteria->compare('dob',$this->dob,true);
$criteria->compare('first_name',$this->first_name,true);
$criteria->compare('last_name',$this->last_name,true);
$criteria->compare('band_id',$this->band_id);
$criteria->compare('note',$this->note,true);
$criteria->compare('address.city',$this->city);
$criteria->compare('address.province_id',$this->province_id);
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
'sort'=>array(
'attributes'=>array(
'id',
'phn',
'first_name',
'last_name',
'band_id',
'city'=>array(
'asc'=>'address.city ASC',
'desc'=>'address.city DESC',
),
'province_id'=>array(
'asc'=>'address.province_id ASC',
'desc'=>'address.province_id DESC',
),
)
)
));
}
В моем представлении у меня есть
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'applicants-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'first_name',
'last_name',
'phn',
array(
'name'=>'band_id',
'value'=>'$data->band->name',
'filter'=>CHtml::listData(Band::model()->findAll(), 'id', 'name')
),
array(
'name'=>'city',
'value'=>'$data->address->city', // causes 'Trying to get property of non-object' - no error if $data->city
'filter'=>CHtml::listData(Address::model()->findAll(), 'city', 'city'),
),
array(
'class'=>'CButtonColumn',
'template'=>'{view}',
'buttons'=>array(
'view'=>array(
'url'=>'Yii::app()->createUrl("/applicant/view", array("id"=>$data->id))',
)
)
),
)
));
У меня отображаются города и раскрывающийся список, но когда я выбираю город из раскрывающегося списка, он не фильтрует виджет с правильными результатами.
Я пытался выполнить решения на следующих страницах
http://www.yiiframework.com/forum/index.php?/topic/11546-cgridview-with-mulitple-model/ http://www.yiiframework.com/forum/index.php?/topic/19913-cgridview-with-multiple-models/