查询数据库时忽略撇号 - Laravel 5.4

时间:2017-03-22 15:36:20

标签: php mysql laravel laravel-5.4 querying

我的网站上有一个自动填充搜索栏,用户可以搜索旅行指南。 某些旅行指南的名称类似于: 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搜索查询中实现它。

1 个答案:

答案 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();
}