我有管理页面包含CGridView并与用户数据库连接,我需要在CGIDView上搜索多列而不仅仅是一个..像这样:
我需要通过电话号码或用户名或电子邮件地址查找用户信息,这可能吗?我的代码在图片下面:
代码
用户模型: 我使用了OR,但它不起作用..我仍然只按名称搜索!
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',
)
));
}
答案 0 :(得分:2)
比较
你犯了一些错误$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');
第一个参数是数据库中的字段,第二个参数是您填写的表单。 您还跳过了允许部分匹配的第三个参数。 第四个参数需要是'OR'
请记住,这是可以解决的问题,如果您不小心,可能会让您感到头痛,因为您将landline
和mobile_phone
存储到$model->full_name
。
我建议您将另一个属性添加到用户模式,例如user_info
,然后使用该属性存储来自请求的输入并将其与数据库进行比较。
上面的示例仍然可以使用,如果您希望使用其他参数改进代码并且无法找到它的方法,我会更好地解释它,只是大喊。