我的网站上有一个自动填充搜索栏,用户可以搜索旅行指南。 某些旅行指南的名称类似于: Snookie's Outfitter 正如您所看到的,它的名称中有一个撇号。因此,当用户输出第一个单词并点击该撇号时,查询会忽略其余单词,因为用户未在搜索栏中插入撇号。我想知道怎么可能忽略数据库中的撇号。
这是我搜索时设置查询的方式:
public function index()
{
$query = request()->get('query');
$results = Listing::searchAndCache($query);
return view('search.index', compact('results', 'query'));
}
我的清单模型:
public static function searchAndCache($query)
{
return self::whereHas('locations', function($m) use($query) {
$m->where('region', 'like', '%'.$query.'%');
$m->orWhere('country', 'like', '%'.$query.'%');
$m->orWhere('city', 'like', '%'.$query.'%');
$m->orWhere('county', 'like', '%'.$query.'%');
$m->orWhere('regionCode', 'like', '%'.$query.'%');
})->live()->orWhere(function($m) use($query){
$m->where('name','like','%'.$query.'%');
$m->live();
})->paginate();
}
我知道之前已经问过这个问题,特别是对于PHP,但我只是不知道如何在Laravel搜索查询中实现它。
答案 0 :(得分:1)
您需要使用HTML :: entities()来编码查询sq引号,双引号将替换为html引用。
public static function searchAndCache($query)
{
$query = HTML::entities($query);
return self::whereHas('locations', function($m) use($query) {
$m->where('region', 'like', '%'.$query.'%');
$m->orWhere('country', 'like', '%'.$query.'%');
$m->orWhere('city', 'like', '%'.$query.'%');
$m->orWhere('county', 'like', '%'.$query.'%');
$m->orWhere('regionCode', 'like', '%'.$query.'%');
})->live()->orWhere(function($m) use($query){
$m->where('name','like','%'.$query.'%');
$m->live();
})->paginate();
}