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

Ignore apostrophes when querying database - Laravel 5.4

我的网站上有一个自动完成的搜索栏,用户可以在其中搜索旅游指南。 有些 的旅行指南有一个名字,例如: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 搜索查询中实现这个问题。

您需要使用 HTML::entities() 来编码您的查询正方形引号,双引号将替换为 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();
}