Reputation: 1203
I want to create a advanced search for my site.
I have category that have a many to many relationship with books (my main model)
how can I search via category with a select in form
my code in controller
public function advancedSearch(Request $request){
$book = Book::query();
if($request->get('name')){
$name = $request->get('name');
$book->where('name', 'like', '%'.$name.'%');
}
if($request->get('author')){
$author = $request->get('author');
$book->where('author', 'like', '%'.$author.'%');
}
if($request->get('category')){
// MY QUESTION
}
$books = $book->get();
$category = Category::lists('name','id');
return view('search')->with('book',$books)->with('title','Search')->with('category',$category);
}
and my form is
{!! Form::open(['method' => 'get' , 'url' => '/search/advanced']) !!}
<div class="form-group col-md-3">
{!! Form::text('name',Input::old('name'),['class' => 'form-control input-sm col-md-3','placeholder'=>'Name']) !!}
</div>
<div class="form-group col-md-3">
{!! Form::text('author',Input::old('author'),['class' => 'form-control input-sm col-md-3','placeholder'=>'Author']) !!}
</div>
<div class="form-group col-md-3">
{!! Form::select('category[]',$category,'Select Category',['class' => 'form-control selectpicker input-sm col-md-3','placeholder'=>'Author','multiple']) !!}
</div>
<input class="btn btn-default" type="submit" name="btn" value="search">
{!! Form::close() !!}
Upvotes: 2
Views: 910
Reputation: 5124
Try the following assuming your relationship name is categories
if($request->get('category')){
$book->whereHas('categories', function($query) use($request) {
$query->whereIn('id', $request->get('category');
});
}
Upvotes: 4