Laravel搜索功能

时间:2020-04-19 11:28:48

标签: laravel

我的首页上有一个搜索栏,如下所示:

                <form action="{{ route('search', $query) }}" method="GET" role="search">
                <div class="input-group mb-4 search_bar">
                    <input type="search" name="search" placeholder="Search..." aria-describedby="button-addon5" class="form-control search_input">
                    <div class="input-group-append">
                        <button id="button-addon5" type="submit" class="btn btn-primary"><i class="fa fa-search"></i></button>
                    </div>
                </div>
                </form>

我的路线如下:

Route::get('all-{query}-posts', 'SearchController@index')->where('query', '[A-Za-z0-9-]+')->name('search');

因此,基本上,我希望在URL中输入搜索栏是这样的:/ all-stuff-posts而不是通常的:?search = stuff 即使我没有在任何地方添加?search = stuff,它似乎也会自动添加到末尾,这是第一个问题。

第二个问题是我只能在控制器中检索查询,但是由于仍未设置查询,因此web.php中出现错误。有其他可行的方法吗?

3 个答案:

答案 0 :(得分:0)

在下面更改您的表单操作方法

<form action="{{url('')}}/all-{{$query}}-posts" ...>

答案 1 :(得分:0)

使用过帐方法。

<form action="{{ route('search', $query) }}" method="POST" role="search">

答案 2 :(得分:0)

如果您想在您的应用中开发搜索引擎,我将建议以下内容。 (最简单的方法之一)。 首先了解POST,GET和PUT。\ 然后,我的模特是这样的

 public function scopeSearchByKeyword($query, $keyword,$location)
{
    if ($keyword!='' and $location!='') {
        $query->where(function ($query) use ($keyword,$location) {
        $query->where("title", "LIKE","%$keyword%")
                ->where("location_id", "$location")
                ->where("status", "1");                     
        });
    }
    else
    {
        $query->where(function ($query) use ($keyword) {
            $query->where("title", "LIKE","%$keyword%")
            ->where("status", "1");
        });
    }
    return $query;
}

我在这里按标题和位置进行搜索。即使仅输入关键字也可以输出。 然后我的控制器是这样的:

public function search_kasblar(Request $request)    
{ 
   $inputs = $request->all();
   $keyword = $inputs['search_keyword'];
   $location = $inputs['location'];

   $jobs= JobBoards::SearchByKeyword($keyword,$location)->get();
   $total_res=count($jobs);  
    return view('jobs.search',compact('jobs','total_res','keyword'));
}

在这里我们可以在输入中搜索传入的数据。 所以我的视图刀片是这样的:

<div class="finderform">
        {!! Form::open(array('url' => 'listings/search','class'=>'','id'=>'search','role'=>'form')) !!}
          <div class="col-md-5 col-sm-5 no-padding"> <i class="fa fa-search local-search-ic"></i>
            <input type="text" class="form-control" name="search_keyword" id="input-search-term" title="Search for..." placeholder="Search anything here" value="" autocomplete="off">
          </div>
          <div class="form-group col-md-5 col-sm-5 no-padding"> <i class="fa fa-map-marker local-search-ic ic-map-location"></i>                        
      <div class="">
      <select id="location" name="location" class="form-control">
        <option value="">Select Location</option>
        @foreach(\App\Location::orderBy('location_name')->get() as $location) 
        <option value="{{$location->id}}">{{$location->location_name}}</option> 
        @endforeach

      </select>
      </div>
          </div>
          <button type="submit" class="btn tp-btn-default tp-btn-lg">Search</button>
        {!! Form::close() !!} 

您可以像这样使用。 并在路由器中使用POST ...