Laravel raw FULLTEXT查询类似于Facebook Search

 无聊人生918_644 发布于 2023-02-03 09:29

我正在构建一个类似于Laravel 4.1中的Facebook的AJAX搜索功能.搜索字段应该搜索users表格first_name,last_nameemail.

我可以输入以下任何条款或部分条款,例如:

贾里德

Eitnier

Jared Eitnier

jeitnier@domain.com

JA

jeit

eitn

首先我试过:

User::where('email', 'LIKE', $search)
  ->orWhere('first_name', 'LIKE', $search)
  ->orWhere('last_name', 'LIKE', $search)
  ->get();

但这只是其中一个词的匹配.然后我试图通过空格爆炸输入并构建一个这样的查询:

User::whereRaw("MATCH (first_name, last_name, email)
                AGAINST ('$explode[0]' IN BOOLEAN MODE)
                AND MATCH (first_name, last_name, email)
                AGAINST ('$explode[1]' IN BOOLEAN MODE)")
     ->get();

哪个有效但只能得到完全匹配('jared','eitnier'或'jared eitnier')

我需要更改什么才能获得LIKE匹配但是输入的任何术语组合?

1 个回答
  • 我能够在这篇文章的帮助下解决这个问题.这是最终的代码:

    $input = Input::get('input');
    
    $exp = explode(' ', $input);
    
    $s = '';
    $c = 1;
    foreach ($exp AS $e)
    {
        $s .= "+$e*";
    
        if ($c + 1 == count($exp))
            $s .= ' ';
    
        $c++;
    }
    
    $query = "MATCH (first_name, last_name, email) AGAINST ('$s' IN BOOLEAN MODE)";
    // $query looks like 
    // MATCH (first_name, last_name, email) AGAINST ('+jar* +eitni*' IN BOOLEAN MODE)
    
    $users = User::whereRaw($query)->get();
    

    2023-02-03 09:34 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有