Mohammad Reza
Mohammad Reza

Reputation: 1203

Advanced search with many to many relationship in laravel

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

Answers (1)

chanafdo
chanafdo

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

Related Questions