2017-12-26 50 views
1

Laravel을 사용하는 템플릿을 수정하려고하는데이 언어에 대해 매우 익숙합니다. 검색된 모든 용어와 일치하도록 검색 결과를 필터링하려고합니다.Laravel 복수 검색 단어와 일치합니다.

예를 들어, 사용자가 "Red"를 검색하면 검색 결과가 모두 빨간색 결과를 반환합니다. 사용자가 "트럭"을 검색하면 검색 결과 모든 트럭이 반환됩니다. 그러나 사용자가 "빨간색 트럭"을 검색하면 "빨간색"검색 결과와 "트럭"검색 결과가 모두 반환됩니다. 그래서 빨간 차와 빨간 자전거가 거기에있다. 그리고 노란 트럭 등. .. 그러나 나는 단지 "빨간 트럭"이 보이기를 바란다. 결과에 저장된 태그 중 하나가 없으면 표시하지 않으려합니다. 현재는 태그 중 하나만 포함하면 표시됩니다.

'태그'의 '위치'와 '위치'부분을 수정해야하며 '='으로 변경해야하지만, 시행 착오를 통해 해결할 수는 없습니다. 그래서 "레드 트럭"에 대한 검색 줄무늬

, 빨간색 저하, S10, 트럭, 광택, 사용자 정의한다 :

는 참고로, 빨간색 트럭의 업로드 된 사진은 태그 phpMyAdmin에 필드에 다음을 것 이 이미지를 반환하고 "빨간색" "자동차"는 포함하지 않습니다.

검색 텍스트 상자의 이름은 "q"이고 id는 "srch-term"입니다. "Red Truck"을 검색하면 브라우저에/q? = red + truck이 표시됩니다.

자료 코드 :

public function search($search, $timeframe = null) 
{ 
    $extends = explode(' ', $search); 
    $images = $this->posts($timeframe)->Where('tags', 'LIKE', '%' . $search . '%') 
     ->whereNull('deleted_at')->whereNotNull('approved_at')->orderBy('approved_at', 'desc'); 

    foreach ($extends as $extend) { 
      $images->orWhere('tags', 'LIKE', '%' . $extend . '%')->whereNotNull('approved_at')->whereNull('deleted_at'); 
    } 

    return $images = $images->with('user', 'comments', 'favorites')->whereNotNull('approved_at')->whereNull('deleted_at')->paginate(perPage()); 
} 
+0

당신이에 의해 orwhere''대체하려고 했'where' 절, 당신은 결과 – YouneL

+0

단일 용어 검색 작품으로 얻을 수 있지만, 여러 단어 검색 0 결과를 반환 할 것. – Levy4u

+0

답변 됨. 그런 식으로 시도하십시오 –

답변

0

당신은 좋은 것입니다. 이런 식으로 쿼리에 whereIn을 사용해야합니다.

$images->whereCategoryId($categoryId)->whereIn('tags', $extends)->whereNotNull('approved_at')->whereNull('deleted_at'); 

업데이트] 답

public function search($search, $category = null, $timeframe = null) 
{ 
    if ($category) 
     $categoryId = $this->category->whereSlug($category)->first(); 

    $images = $this->posts($category, $timeframe)->with('user', 'comments', 'favorites')->whereNotNull('approved_at')->whereNull('deleted_at'); 

    if (isset($categoryId)) 
     $images->whereCategoryId($categoryId); 

    $images->whereIn('tags', explode(' ', $search)); 

    return $images->orderBy('approved_at', 'desc')->paginate(perPage()); 
} 
+0

이제 모든 검색 결과가 공백/비어 있습니다. 어쨌든 모든 카테고리에서 검색하고 싶으므로 카테고리 멘트를 제거하기 위해 초기 스 니펫 코드를 조정했습니다. ' – Levy4u

1

그것을 알아 냈어!

Public function search($search, $timeframe = null) 
{ 
$extends = explode(' ', $search); 
$images = $this->posts($timeframe) 
      ->whereNull('deleted_at')->whereNotNull('approved_at') 
      ->orderBy('approved_at', 'desc'); 

$images->where(function($q) use ($extends) { 
    foreach ($extends as $extend) { 
     $q->Where('tags', 'LIKE', '%' . $extend . '%'); 
    } 
}); 

return $images->with('user', 'comments', 'favorites')->paginate(perPage()); 
}