【问题标题】:Multi column search on Yii CGridViewYii CGridView 上的多列搜索
【发布时间】:2014-09-14 07:53:35
【问题描述】:

我的管理页面包含 CGridView 并与用户数据库连接,我需要在 CGridView 上进行搜索,而不仅仅是一个列。像这样:

我需要通过电话号码或用户名或电子邮件地址查找用户信息,可以吗?我的代码在图片下方:

代码

用户模型: 我使用了 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',
        )
    ));
}

【问题讨论】:

  • 我认为在 Yii 中是不可能的
  • @bad_boy 检查答案 :)

标签: php search yii cgridview


【解决方案1】:

你在比较时犯了一些小错误

$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'

请记住,这是一种解决方法,如果您不小心,以后可能会让人头疼,因为您将 landlinemobile_phone 存储到 $model->full_name 中。

我建议您向用户模式添加另一个属性,例如 user_info,然后使用该属性存储来自请求的输入并将其与数据库进行比较。

上面的例子仍然有效,如果你想用额外的参数改进你的代码并且你找不到你的方法,我会更好地解释它,大声喊叫。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    • 2012-11-01
    相关资源
    最近更新 更多