laravel中的条件搜索

时间:2018-02-05 03:30:09

标签: php laravel search laravel-query-builder

问题:

当我在posts中搜索时,我会从postsproducts获得结果,但当我在products中搜索时,我只会从products获得结果(这是正确的)

我的控制员:

public function search(Request $request) {
        $search = request('search');
        $searchType = request('searchType');

        if(strcmp($searchType, "posts") == 0){
          $posts = Post::where('title', 'like', "%{$search}%")
          ->orWhere('description', 'like', "%{$search}%")
          ->get();
        }else{
          $products = Product::where('title', 'like', "%{$search}%")
          ->orWhere('description', 'like', "%{$search}%")
          ->get();
        }

        return view('front.search', compact('posts', 'products'));
    }

我的刀片(表格)

<form class="search" action="/search" method="GET" role="search">
                        <input type="text" name="search" class="awesomplete search_box" list="mylist" placeholder="Enter your keyword ...">
                        <datalist id="mylist">
                          @foreach($products as $product)
                            <option>{{$product->title}}</option>
                          @endforeach
                        </datalist>
                        <div class="collections-selector">
                          <select class="single-option-selector" data-option="collection-option" id="collection-option" name="searchType">
                            <option value="products">Products</option>
                            <option value="posts">Posts</option>
                          </select>
                        </div>
                        <button class="search_submit" type="submit">
                          <svg aria-hidden="true" role="presentation" class="icon icon-search" viewBox="0 0 37 40"><path d="M35.6 36l-9.8-9.8c4.1-5.4 3.6-13.2-1.3-18.1-5.4-5.4-14.2-5.4-19.7 0-5.4 5.4-5.4 14.2 0 19.7 2.6 2.6 6.1 4.1 9.8 4.1 3 0 5.9-1 8.3-2.8l9.8 9.8c.4.4.9.6 1.4.6s1-.2 1.4-.6c.9-.9.9-2.1.1-2.9zm-20.9-8.2c-2.6 0-5.1-1-7-2.9-3.9-3.9-3.9-10.1 0-14C9.6 9 12.2 8 14.7 8s5.1 1 7 2.9c3.9 3.9 3.9 10.1 0 14-1.9 1.9-4.4 2.9-7 2.9z"></path></svg>
                        </button>
                      </form>

我的路线:

Route::any('/search', 'frontend\SearchController@search')->name('search');

我的搜索结果页面:

@if(isset($posts))
 @forelse($posts as $post)
  {{$post->title}} <br>
 @empty
  no post!
 @endforelse
@endif


@if(isset($products))
 @forelse($products as $product)
  {{$product->title}} <br>
 @empty
  no product!
 @endforelse
@endif

截图

res1

PS:此截图是在帖子搜索中拍摄的。

其他

dd($posts);

res2

dd($products);

res3

dd中,一切似乎都很好,但实际上他们都聚在一起。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

在讨论时,您在标题搜索表单中设置了var onKeyPressFunction = (_: any, event: any): void => { ... } 变量,并在检查是否设置了noUnusedParameters时污染了您的搜索结果页,并且确实如此设置,以便打印出来(即,您的搜索结果是从标题共享表单中的变量打印产品)。

只需在共享刀片模板中为表单使用其他变量名称,例如,使用更具体的$products,而不是使用$products