やりたいこと
- 条件を複数指定して検索したい
- ひとつでも複数でも検索可能に
追記:コメントから学んだこと
コメントで頂いた書き方を追記しました。
検索方法によってはとてもスマートにコンパクトにできます。
- Controllerでの値の取得、検索はhasメソッドを使用してコンパクトにできる
- 検索方法が同じであればonlyメソッドを使用してコンパクトにできる
View
resources\views\example.blade.php
{!! Form::open() !!}
    タイトル:{!! Form::text('s_title', $s_title) !!}
    カテゴリー:{!! Form::text('s_category', $s_category) !!}
    監督:{!! Form::text('s_production', $s_production) !!}
    出演:{!! Form::text('s_performer', $s_performer) !!}
    {!! Form::submit('検索') !!}
{!! Form::close() !!}
 
@foreach($movies as $movie)
<div>
    <a>{{ $movie->id }}</a>
    <a>{{ $movie->title }}</a>
    <a>{{ $movie->category }}</a>
    <a>{{ $movie->production }}</a>
    <a>{{ $movie->performer }}</a>
</div>
@endforeach
Controller
app\Http\Controllers\SearchController.php
<?php
 
namespace App\Http\Controllers;
 
use App\Movies;
use Request;
 
class SearchController extends Controller
{
    public function example(Request $request)
    {
        $query = Movies::query();
        //自分の書き方
        // 検索条件の値を取得
        $s_title = $request->input('s_title');
        $s_category = $request->input('s_category');
        $s_production = $request->input('s_production');
        $s_performer= $request->input('s_performer');
        // もし$s_titleがあれば
        if(!empty($s_title)) {
            $query->where('title', 'like', '%'.$s_title.'%');
        }
        if(!empty($s_category)) {
            $query->where('category', 'like', '%'.$s_category.'%');
        }
        if(!empty($s_production)) {
            $query->where('production', 'like', '%'.$s_production.'%');
        }
        if(!empty($s_performer)) {
            $query->where('performer', 'like', '%'.$s_performer.'%');
        }
        //コメントでいただいた書き方
        //hasメソッドを使用(値が存在、かつ空ではないか)
        if($request->has('s_title'))) {
            $query->where('title', 'like', '%'.$request->get('s_title').'%');
        }
       //また、同じ検索条件(今回はwhere)の場合は、onlyメソッドでまとめることができる
       foreach ($request->only(['s_title', 's_category','s_production','s_performer']) as $key => $value) {
           $query->where($key, 'like', '%'.$value.'%');
       }
       $movies = $query->get();
        return view('example', compact('movies'));
    }
}
