簡體   English   中英

為表CGridView(Yii)中添加的列創建過濾器

[英]Creating a filter for an added column in a table 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'), ); } 

要使用新添加的額外列進行過濾,您必須對模型進行以下更改:

// 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,
    ));   
}

希望這對您有所幫助! 讓我知道是否有任何問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM