Laravelで検索フォームの作成をしてみます
まずはおさらい
SQL文
SELECT * FROM `テーブル名` WHERE `カラム名` LIKE '%〇〇%'
であいまい検索ができます
・検索するときに 〇〇 △△ と二つの文字をあいまい検索
SELECT * FROM `contact_forms` WHERE `name` LIKE '%〇〇%' AND `name` LIKE '%△△%'
Laravelへの記載
- viewの記載
<form method="get" action="{{route('〇〇.index')}}">
<input name="search" type="search" placeholder="検索" aria-label="Search">
<button>検索する</button>
</form>
@foreach($contacts as $contact)
{{$contact->id}}
{{$contact->name}}
{{$contact->title}}
{{$contact->created_at}}
@endforeach
2.Modelの記載
ローカルスコープを使用します
public function scopeSearch($query, $search)
{
// もし検索フォームにキーワードが入力されたら
if($search !== null){
// 全角スペースを半角に変換
$search_split = mb_convert_kana($search, 's');
// 単語を半角スペースで区切り、配列にする(例:"山田 太郎" → ["山田", "太郎"])
$search_split2 = preg_split('/[\s]+/', $search_split);
// 単語をループで回し、部分一致するものがあれば、$queryとして保持される
foreach( $search_split2 as $value ){
$query->where('name', 'like', '%' .$value. '%'); }
}
return $query;
}
3.Controllerの記載します
public function index(Request $request)
{
$search = $request->search;
$query = ContactForm::search($search);
$contacts = $query->select('id','name','title','created_at')
->paginate(20);
return view('contacts.index',compact('contacts'));
}
これでできました
コメント