###やりたいこと
- 条件を複数指定して検索したい
- ひとつでも複数でも検索可能に
###追記:コメントから学んだこと
コメントで頂いた書き方を追記しました。
検索方法によってはとてもスマートにコンパクトにできます。
- 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'));
}
}