我正在构建一个类似于Laravel 4.1中的Facebook的AJAX搜索功能.搜索字段应该搜索users
表格first_name
,last_name
和email
.
我可以输入以下任何条款或部分条款,例如:
贾里德
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
匹配但是输入的任何术语组合?
我能够在这篇文章的帮助下解决这个问题.这是最终的代码:
$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();