У меня есть страница администратора, содержащая CGridView и связанная с пользовательской базой данных, мне нужно, чтобы поиск в CGridView работал по многостолбцовой системе, а не только по одному .. вот так:
Мне нужно найти информацию о пользователе по номеру телефона ИЛИ имени пользователя ИЛИ адресу электронной почты, возможно ли это? и мой код находится под изображением:
Код
Модель пользователя:
Я использовал ИЛИ, но это не работает .. Я все еще ищу только по имени!
public function search()
{
// @todo Please modify the following code to remove attributes that should not be searched.
$criteria=new CDbCriteria;
$criteria->compare('id',$this->id);
$criteria->compare('full_name',$this->full_name,'OR');
$criteria->compare('full_name',$this->landline,'OR');
$criteria->compare('full_name',$this->mobile_number,'OR');
$criteria->compare('email_address',$this->email_address,true);
$criteria->compare('city',$this->city,true);return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
'sort'=>array(
'defaultOrder'=>'id DESC',
)
));
}
Вы сделали небольшие ошибки, сравнивая
$criteria->compare('full_name', $this->full_name, true, 'OR');
$criteria->compare('landline', $this->full_name, true, 'OR');
$criteria->compare('mobile_number', $this->full_name, true, 'OR');
Первый параметр — это поле в базе данных, а второй — это то, что вы заполнили в форме.
Вы также пропустили третий параметр, который разрешает частичное соответствие.
И четвертый параметр должен быть «ИЛИ»
Имейте в виду, что это обходной путь, и он может вызвать некоторые головные боли позже, если вы не будете осторожны, потому что вы храните landline
а также mobile_phone
в $model->full_name
,
Я бы предложил вам добавить еще одно свойство в режим пользователя, что-то вроде user_info
и затем использовать это свойство для хранения ввода из запроса и сравнения его с базой данных.
Пример из приведенного выше будет работать, если вы хотите улучшить свой код с помощью дополнительного параметра, и вы не можете найти выход с ним, я объясню это лучше, просто кричите.
Других решений пока нет …