laravelで検索フォームを作ろう

PHP、larave

Laravelで検索フォームの作成をしてみます

まずはおさらい

SQL文

SELECT * FROM `テーブル名` WHERE `カラム名` LIKE '%〇〇%'

であいまい検索ができます

・検索するときに 〇〇 △△ と二つの文字をあいまい検索

SELECT * FROM `contact_forms` WHERE `name` LIKE '%〇〇%' AND `name` LIKE '%△△%'

Laravelへの記載

  1. 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'));
    }

これでできました

コメント

タイトルとURLをコピーしました