首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Yii2搜索模型

Yii2搜索模型
EN

Stack Overflow用户
提问于 2018-11-28 07:31:32
回答 2查看 156关注 0票数 2

在我的网站上,当我搜索阿历克斯·刘时,我会给出结果。问题是我如何修改代码,所以当我搜索刘亚力克斯的时候,它仍然会显示刘的结果。现在还没有。

代码语言:javascript
复制
$query->orFilterWhere(['like', 'fullname', $this->globalSearch])

这是我的搜索模型中的代码。

请帮我处理这个。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-29 13:41:28

使用CONCAT()进行MYSQL查询的更好方法,如下所示

代码语言:javascript
复制
if( $this->fullname!== null && $this->fullname !== '' ){
    $searchTerms = explode(" ", $this->fullname);
    if( sizeof($searchTerms) > 1 ){
        $conditions[]='OR';
        foreach( $searchTerms as $term ){
            $conditions[] = ['like', 'fullname', new \yii\db\Expression('CONCAT(CONCAT("%","' . $term . '"),"%")')];
        }
        $query->orFilterWhere($conditions);
    } else{
        $query->orFilterWhere(
                ['like', 'fullname', new \yii\db\Expression('CONCAT(CONCAT("%","' . $searchTerms[0] . '"),"%")')]
        );
    }

}

注意:如果您正在以first lastfirst middle last__格式搜索名称,这意味着您可以搜索Alex Lau JohnJohn Alex Lau Lau John Alex

票数 1
EN

Stack Overflow用户

发布于 2018-11-28 07:45:05

尝尝这个

代码语言:javascript
复制
$words = explode(' ',$this->globalSearch);

if (count($words) > 1) {
    foreach ($words as $word) {
        $query->orFilterWhere(['like', 'fullname', $word]);
    }
} else {
    $query->orFilterWhere(['like', 'fullname', $this->globalSearch]);
}

备注:,您需要确保空白

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53514275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档