2017-04-26 1 views
1

검색 폼에서 네 개의 입력을받는 컨트롤러가 있습니다.Laravel 및 PHP 최고의 다중 검색 방법

SearchController.php 코드 내가 내 데이터베이스

문제에 4 열을 검색하려고

을하려고하고 무엇

public function results(Request $request) { 
    $text   = $request -> text; 
    $pet   = $request -> pet; 
    $category  = $request -> category; 
    $city   = $request -> city; 
    $searchArray = []; 
    if(empty($text) && empty($pet) && empty($category) && empty($city)) { 
     Session::flash('danger', "You didn't select any search any search."); 
     return redirect() -> back(); 
    } 

    //SEARCH CODE HERE 
} 

하나의 쿼리에서 4 개의 열을 검색해야합니다.

if(!empty($text) && !empty($pet)) 
      $result = Post::where('text', 'like', '%'.$text.'%') -> where('text', $pet) -> get(); 

이 방법은 잘 작동하지만 난 경우 여러 것이다 다음 $text 변수가 비어 있지 및 $pet 변수가 비어 있지 않은 경우 내가 확인해야한다는 것을 의미

나는이 쿼리를 수행해야 모든 가능성을 확인할 수있는 진술.

더 빠르고 최적의 솔루션이 있습니까? 수동으로

+0

당신이 –

+0

그것은 감사에 대해이 읽을 @SapneshNaik 멋진 사용자 정의 검색을 구현하기 위해 부트 스트랩 선행 입력 플러그인으로 사용할 수 있습니다 https://github.com/nicolaslopezj/searchable Laravel에 대한 검색 패키지를 참조하십시오 : –

답변

1

옵션 1

빌드 로직. 이것은 많은 상황에서 가장 좋은 방법입니다. 예 : 2

사용 conditional clauses

$result = Post::query(); 

if (!empty($text)) { 
    $result = $result->where('text', 'like', '%'.$text.'%'); 
} 

if (!empty($pet)) { 
    $result = $result->where('pet', $pet); 
} 

if (!empty($category)) { 
    $result = $result->where('category', $category); 
} 

if (!empty($city)) { 
    $result = $result->where('city', 'like', '%'.$city.'%'); 
} 

$result = $result->get(); 

옵션. 예 :

Post::when($text, function ($q) use ($text) { 
     return $q->where('text', 'like', '%'.$text.'%'); 
    }) 
    ->when($pet, function ($q) use ($pet) { 
     return $q->where('pet', $pet); 
    }) 
    ->when($category, function ($q) use ($category) { 
     return $q->where('category', $category); 
    }) 
    ->when($city, function ($q) use ($city) { 
     return $q->where('city', 'like', '%'.$city.'%'); 
    }) 
    ->get(); 
+1

그건 아주 좋은 해결책이고 내가 찾고있는 것입니다. 나는 Laravel : D에서 이것을 할 수 있다는 것을 몰랐습니다. –