我正在构建一个类似于Laravel 4.1中的Facebook的AJAX搜索功能。搜索字段应针对users
,first_name
和last_name
搜索email
表。
我可以输入以下任何条款或部分条款,例如:
首先我尝试了:
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
次匹配,但输入的任何条款组合都会被
答案 0 :(得分:5)
我能够在this post的帮助下解决这个问题。这是最终的代码:
$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();