Создание фильтра для добавленного столбца в таблице CGridView (Yii)
Так что я немного новичок в Yii, и в моем проекте мне нужно было добавить и дополнительный столбец, содержащий данные из другой таблицы в базе данных. Мне нужно также реализовать фильтрацию для этого столбца, и из того, что я прочитал, мне нужно добавить его в функцию поиска в модели, но я не могу его осуществить. Любая помощь приветствуется. Благодарю.
Это представление (добавлен столбец 'areaReservada')
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'reserva-grid',
'dataProvider'=>$model->search(),
'itemsCssClass'=>"table table-striped",
'pager'=>array("htmlOptions"=>array("class"=>"pagination")),
//'ajaxupdate'=>false,
'columns'=>array(
array(
'name'=>'idreserva',
'header'=>'<p style="color: black">Número de reserva</p>',
//'value'=>'$data->area->nombre',
//'type'=>'raw',
'value'=>'$data->idreserva',
//'filter'=>Costoarea::getAreas(),
),
//'idreserva',
array(
'name'=>'fecha',
'header'=>'<p style="color: black">Fecha de Reserva</p>',
'value'=>'$data->fecha',
//'type'=>'raw',
//'value'=>'$model->estadoReserva_idestadoReserva',
//'filter'=>Costoarea::getAreas(),
),
//'fecha',
array(
'name'=>'areaReservada',
'header'=>'<p style="color: black">Área Reservada</p>',
'value'=>'$data->getArea($data->idreserva)',
//'type'=>'raw',
//'value'=>'$model->estadoReserva_idestadoReserva',
//'filter'=>Costoarea::getAreas(),
)));?>
В этой области моя функция поиска и правила, установленные в моей модели
public function search() { $criteria=new CDbCriteria; $criteria->compare('idreserva',$this->idreserva); $criteria->compare('fecha',$this->fecha,true); $criteria->compare('motivo',$this->motivo,true); $criteria->compare('monto',$this->monto); $criteria->compare('responsable',$this->responsable,true); $criteria->compare('estadoReserva_idestadoReserva',$this->estadoReserva_idestadoReserva); $criteria->compare('usuario_idusuario',$this->usuario_idusuario); return new CActiveDataProvider($this, array( 'criteria'=>$criteria,)); } public function rules() { return array(array('estadoReserva_idestadoReserva,usuario_idusuario', 'required'), array('estadoReserva_idestadoReserva, usuario_idusuario','numerical', 'integerOnly'=>true),array('monto','numerical'), array('motivo, responsable', 'length', 'max'=>45), array('fecha', 'safe'), array('idreserva, fecha, motivo, monto, responsable,estadoReserva_idestadoReserva, usuario_idusuario', 'safe',> 'on'=>'search'), ); }
1 ответ
Чтобы выполнить фильтрацию с использованием нового добавленного дополнительного столбца, необходимо внести следующие изменения в модель:
// For example, new extra column is 'areaReservada'.
public $areaReservada;
public function rules() {
return array(
array('areaReservada', 'safe'),
);
}
public function relations() {
return array(
'other_model' => array(self::BELONGS_TO, 'OtherModel', 'foreign_key'),
);
}
public function search() {
$criteria = new CDbCriteria;
$criteria->with = array('other_model');
$criteria->compare('idreserva', $this->idreserva);
$criteria->compare('fecha', $this->fecha, true);
$criteria->compare('motivo', $this->motivo, true);
$criteria->compare('monto', $this->monto);
$criteria->compare('responsable', $this->responsable, true);
$criteria->compare('estadoReserva_idestadoReserva', $this->estadoReserva_idestadoReserva);
$criteria->compare('usuario_idusuario', $this->usuario_idusuario);
$criteria->compare('other_model.column', $this->areaReservada); // Compare value contained in 'areaReservada' with column of other model to be filtered
return new CActiveDataProvider($this, array(
'criteria' => $criteria,
));
}
Надеюсь, это поможет вам! Дайте мне знать, если есть какое-либо беспокойство от этого.