Denis Alexandrov
Denis Alexandrov

Reputation: 185

Yii CGridView and default values in CDbCriteria

I have simple CGridView, which is not showing me any data at all.

I've logged query built by CDbCriteria and there was some LIKE conditions which uses mysql default field values, so MySQL searches for entries with default values in required fields.

Since I have none entries matching this condidion it returns 0 rows. But the thing is, I don't need these LIKEs. Is there a way to disable it?

Here's the view:

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider' => $model->search(),
    'filter' => $model,
    'columns' => array(
        array(
            'name' => 'name',
            'type' => 'raw',
            'value' => 'CHtml::encode($data->name)'
        ),
        array(
            'name' => 'email',
            'type' => 'raw',
            'value' => 'CHtml::link(CHtml::encode($data->email), "mailto:".CHtml::encode($data->email))',
        ),
    ),
));

Controller:

public function actionUsers() {
            $model = new Users();
            $this->renderPartial('users',array(
                'model' => $model,
            ));
}

Function Search of model Users:

return new CActiveDataProvider(get_class($this), array(
        'criteria'=>$criteria,
                    'sort'=>array(
                        'defaultOrder'=>'user ASC',
                    ),
                    'pagination'=>array(
                            'pageSize'=>5
                    ),
));

And Logged Query:

SELECT * FROM `users` `t` WHERE (((((email LIKE :ycp0) AND (`group` LIKE :ycp1)) AND (gender LIKE :ycp2)) AND (city LIKE :ycp3)) AND (name LIKE :ycp4)) AND (av_url LIKE :ycp5) ORDER BY `t`.`name` LIMIT 5. Bound with :ycp0='%NotSet%', :ycp1='%3%', :ycp2='%Secret%', :ycp3='%NotSet%', :ycp4='%NotSet%', :ycp5='%noav.jpg%'

Upvotes: 0

Views: 387

Answers (1)

bentesha
bentesha

Reputation: 948

I am new to Stackoverflow and don't have sufficient reputation to post a comment, otherwise I would have asked that you share more information on how you configure your CDbCriteria object in your $model->search() function.

But, I suspect that you are using partial matches in the compare method, which can be disabled by passing false in the $partialMatch parameter as follows:

$criteria = new CDbCriteria;
$criteria->compare('email', $someValue, false);

Or, since false is the default value, you can simple write:

$criteria->compare('email', $someValue);

Upvotes: 1

Related Questions