2017-01-04 11 views
0

ウェブサイトの検索フォームに問題があります。基本的に、ユーザーが複数のキーワードを検索フォーム(例:名刺)に入力すると、検索結果にキーワード1(ビジネスなど)のすべての画像とキーワード2のすべての画像(カードなど)が表示されます。これは悪いですが、検索フォームはまったく関係ありません。あなたは下のコードを見て、それを修正するのを助けて、両方のキーワード(keyword1 + AND + keyword2)を持つ画像だけを検索フォームに表示することができますか?laravel複数のキーワードを検索

検索クエリの前と後に %記号を使用する場合、あなたは「その項目に私に何かを与える」と言う
public function search($search, $category = null, $timeframe = null) 
    { 
     $extends = explode(' ', $search); 
     if ($category) { 
      $categoryId = $this->category->whereSlug($category)->first(); 
     } 
     $images = $this->posts($category, $timeframe)->where('title', 'LIKE', '%' . $search . '%') 
     ->orWhere('tags', 'LIKE', '%' . $search . '%') 
     ->whereNull('deleted_at')->whereNotNull('approved_at')->orderBy('approved_at', 'desc'); 

     foreach ($extends as $extend) { 
      if (isset($categoryId)) { 
       $images->whereCategoryId($categoryId)->Where('tags', 'LIKE', '%' . $extend . '%')->whereNotNull('approved_at')->whereNull('deleted_at') 
       ->whereCategoryId($categoryId)->orWhere('title', 'LIKE', '%' . $search . '%')->whereNotNull('approved_at')->whereNull('deleted_at') 
       ->whereCategoryId($categoryId)->orWhere('image_description', 'LIKE', '%' . $search . '%')->whereNotNull('approved_at')->whereNull('deleted_at'); 
      } else { 
       $images->orWhere('tags', 'LIKE', '%' . $extend . '%')->whereNotNull('approved_at')->whereNull('deleted_at') 
       ->orWhere('title', 'LIKE', '%' . $search . '%')->whereNotNull('approved_at')->whereNull('deleted_at') 
       ->orWhere('image_description', 'LIKE', '%' . $search . '%')->whereNotNull('approved_at')->whereNull('deleted_at'); 
      } 
     } 

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

uh ..どのように動作するかについての説明?現在の出力、予想される出力などのヒントを与えてくれるでしょう。とにかく ' - > orWhere( 'tags'、 'LIKE'、 '%'。$ extend。 '%')' 、 私は考えます.. –

答えて

0

、あなたのシステムが正確にユーザーが入力した内容どおりの結果を検索し、与えたい場合は、あなたはキーフレーズだけを使うべきです。以下のコードを試してください。

 public function search($search, $category = null, $timeframe = null) 
    { 
     $extends = explode(' ', $search); 
     if ($category) { 
      $categoryId = $this->category->whereSlug($category)->first(); 
     } 
     $images = $this->posts($category, $timeframe) 
     ->where('title', 'LIKE', "$search") 
     ->orWhere('tags', 'LIKE', "$search") 
     ->whereNull('deleted_at') 
     ->whereNotNull('approved_at') 
     ->orderBy('approved_at', 'desc'); 

     foreach ($extends as $extend) { 
      if (isset($categoryId)) { 
       $images->whereCategoryId($categoryId)->Where('tags', 'LIKE', "$search") 
       ->whereNotNull('approved_at')->whereNull('deleted_at') 
       ->whereCategoryId($categoryId)->orWhere('title', 'LIKE', "$search") 
       ->whereNotNull('approved_at')->whereNull('deleted_at') 
       ->whereCategoryId($categoryId) 
->orWhere('image_description', 'LIKE', "$search") 
       ->whereNotNull('approved_at')->whereNull('deleted_at'); 
      } 
      else { 
       $images->orWhere('tags', 'LIKE', "$extend") 
       ->whereNotNull('approved_at')->whereNull('deleted_at') 
       ->orWhere('title', 'LIKE', "$search") 
       ->whereNotNull('approved_at')->whereNull('deleted_at') 
       ->orWhere('image_description', 'LIKE', "$search") 
       ->whereNotNull('approved_at')->whereNull('deleted_at'); 
      } 
     } 
     return $images = $images->with('user', 'comments', 'favorites') 
     ->whereNotNull('approved_at') 
     ->whereNull('deleted_at') 
     ->paginate(perPage()); 
    } 
関連する問題