2017-12-26 31 views
1

私はLaravelを使用するテンプレートを変更しようとしています。私はすべての検索語句に一致する検索結果をフィルタリングしようとしています。Laravel複数の検索語に一致します

たとえば、ユーザーが「赤」を検索すると、検索によってすべての赤い結果が返されます。ユーザーが "Trucks"を検索すると、すべてのトラックが検索されます。しかし、ユーザーが「Red Trucks」を検索すると、「赤」の検索結果と「トラック」の検索結果の両方が返されます。だから、赤い車と赤い自転車は、黄色のトラックだけでなく、そこにあります...しかし、私は "赤いトラック"が表示されたい。結果に保存されたタグが1つもない場合は、表示したくありません。現在のところ、タグの1つが含まれていて、表示されています。

"タグ"の "場所"と "場所"の部分を変更し、恐らくそれらを '='に変更する必要があることは知っていますが、試行錯誤して動作させることはできません。だから、「赤いトラック」を探しストライプ

、赤、低下、S10、トラック、光沢、カスタムする必要があります

は参考までに、赤いトラックのアップロードの写真は、タグのphpMyAdminのフィールドに次のように持っているでしょうこのイメージを返し、「赤い」「車」は含みません。

検索テキストボックスには、name = "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

あなたが '' WHERE'句によってorwhere'置き換えようとしました、あなたは結果として – YouneL

+0

シングル用語検索作品を何を得るのですが、複数の単語の検索は0結果を返します。 – Levy4u

+0

回答が更新されました。その方法を試してください –

答えて

0

あなたは良い行っています。このようにクエリにwhereInを使用するだけです。

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

UPDATED ANSWER

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()); 
} 
関連する問題