$model=new MyModel('search');
$model->unsetAttributes(); // clear any default values
$criteria = new CDbCriteria;
//
// Order By Country
//
$criteria->group = 'country';
if (isset($_GET['MyModel']))
$model->attributes = $_GET['MyModel'];
$dataProvider = new CActiveDataProvider('MyModel', array(
'criteria' => $criteria,
));
But in this way you lost all compare() that are in search() of model.
I usually split search() in two methods: searchCriteria() and search(). With searchCriteria() I have $criteria object to be used also in grid.
For example, in my custom model:
public function searchCriteria()
{
// @todo Please modify the following code to remove attributes that should not be searched.
$criteria=new \CDbCriteria;
$criteria->compare('country',$this->country);
$criteria->compare('user',$this->user,true);
return $criteria;
}
public function search()
{
$criteria=$this->searchCriteria();
return new \CActiveDataProvider($this, array(
'criteria'=>$criteria,
));
}
So in actionGrid I can use:
$model=new MyModel('search');
$model->unsetAttributes(); // clear any default values
if (isset($_GET['MyModel']))
$model->attributes = $_GET['MyModel'];
$criteria = $model->searchCriteria();
$criteria->group = 'country';
$dataProvider = new CActiveDataProvider('MyModel', array(
'criteria' => $criteria,
));