2017-03-22 8 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')); 
    } 

나의 리스팅 모델 :

이 누군가가 검색 할 때 내 쿼리를 설정하는 방법이다 나는이 특히 PHP를 들어, 이전에 요청 된 알

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

을,하지만 난 단지 돈 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(); 
}