Question

Can some one please help me with my filters, they do not seem to be getting data from the database.

View that has the CGridview

$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'user-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'enablePagination'=>true,
'pager'=>array(
    'maxButtonCount'=>'7',
),
'columns'=>array(
    array(
        'name'=>'bt_number',
        'type'=>'raw',
        'value'=>$model->bt_number,

    ),
    array(
        'name'=>'date_time',
        'type'=>'raw',
        'value'=>$model->date_time,
    ),
            array(
        'name'=>'broker',
        'type'=>'raw',
                    'value'=>$model->broker,
        'filter'=>Yii::app()->params['brokers'],

    ),
    array(
        'class'=>'CButtonColumn',
        'template'=>'{view}{update}'
    ),
)
));

Model the model, I have tried to print out one of the search elements I wa filtering on not nothing display

public function search()
{
    // Warning: Please modify the following code to remove attributes that
    // should not be searched.

    echo "booker ".$this->broker;// exit;
           //above only displays booker there is nothing in $this->broker

    $criteria=new CDbCriteria;

    $criteria->compare('bt_number',$this->bt_number);
    $criteria->compare('sign',$this->sign,true);
    $criteria->compare('fm_buys',$this->fm_buys,true);
    $criteria->compare('fm_buys_amt',$this->fm_buys_amt,true);
    $criteria->compare('against',$this->against,true);
    $criteria->compare('bt_sett_date',$this->bt_sett_date,true);
    $criteria->compare('bt_order_type',$this->bt_order_type,true);
    $criteria->compare('date_time',$this->date_time,true);
    $criteria->compare('dealer',$this->dealer,true);
    $criteria->compare('rate',$this->rate,true);
    $criteria->compare('broker',$this->broker,true);
    $criteria->compare('recapped',$this->recapped,true);
    $criteria->compare('settled',$this->settled,true);
    $criteria->compare('sett_date',$this->sett_date,true);

    return new CActiveDataProvider($this, array(
        'criteria'=>$criteria,
    ));
}

Controller is not getting anything from the $_GET var

public function actionIndex()
{
    $model=new BrokerTrades('search');
    $model->unsetAttributes();  // clear any default values
    if(isset($_GET['BrokerTrades']))
        $model->attributes=$_GET['BrokerTrades'];

    print_r($_GET)  ;
    $this->render('index',array(
        'model'=>$model,
    ));
}

I can not see why this filter is not work please help.

Was it helpful?

Solution

Make sure each of the fields you want to filter is set to safe in the rules of the model.

public function rules(){
  return array(
    ..
    array('bt_number,sign,fmbuys','safe','on'=>'search'),
  );
}

The attributes need to be set the safe in order for this line to function:

$model->attributes=$_GET['BrokerTrades'];

Just include all the attributes you want to search by in the first string, separated by commas.

See if that helps at all.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top