2017-03-22 5 views
0

私は、ユーザーが旅行ガイドを検索することができる自分のサイトにオートコンプリート付きの検索バーを持っています。 の旅行ガイドには、たとえば次のような名前があります。Snookie's Outfitterご覧のとおり、名前にアポストロフィがあります。したがって、ユーザーが最初の単語を入力してそのアポストロフィをヒットすると、ユーザーは検索バーにアポストロフィを挿入しなかったため、残りの単語は無視されます。私はおそらくデータベース内のアポストロフィを無視することができるのだろうかと思っていました。データベースを照会するときにアポストロフィを無視する - Laravel 5.4

これは、誰かが検索したときに私のクエリが設定されている方法です。

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

HTML :: entities()を使用してクエリをエンコードするだけで、注入からクエリを保護するための安全な方法です。 –

+0

あなたはSQLでそれを行う方法を知っていますか?私は、SQLをLaravelの構文に変換するのにはかなり良いです。私はSQLでうまくいくわけではありません。 – devk

+0

私はこのリンクで何かを見つけましたが、通常のPHP構文を使用しています:http://stackoverflow.com/questions/4351337/ignoring-apostrophes-in-mysql-searches – David

答えて

1

クエリsqquesをエンコードするには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(); 
} 
関連する問題