LoginSignup
2
2

More than 5 years have passed since last update.

Laravelで絞り込み検索をする

Posted at

やりたいことは

  • フォームに入力されたデータを取得して、一致するデータのみをリスト表示

ビュー

<form action="/search" method="get">
    <input type="text" name="name" placeholder="社名・社員名を入力ください">
    <button type="submit" value="検索">検索</button>
</form>


<table class="staffs">
    <thead>
        <tr>
            <th>会社名</th>
            <th>氏名</th>
            <th>ふりがな</th>
        </tr>
    </thead>
    <tbody>
        @forelse ($testData as $staff)
            <tr>
                <td>{{$staff["company"]}}</td>
                <td>{{$staff["name"]}}</td>
                <td>{{$staff["kana"]}}</td>
            </tr>
        @empty
            <tr>
                <td>データがありません</td>
                <td>データがありません</td>
                <td>データがありません</td>
            </tr>
        @endforelse
    </tbody>
</table>

コントローラー

unsetを使う

指定した変数の割当を解除する関数。
これを使って条件にあてはまらない配列だけ解除。
検索ボタンを押すと下記のメソッドが実行されるようにすればOK。

Route::get('/search', function(Request $request){
    $testData = [];
    $testData[] = [
        "company" => "株式会社クエスチョン",
        "name" => "鈴木たけし",
        "kana" => "すずきたけし"
    ];
    $testData[] = [
        "company" => "株式会社hatenabox",
        "name" => "山田太郎",
        "kana" => "やまだたろう"
    ];
    $testData[] = [
        "company" => "チャット(株)",
        "name" => "田中一郎",
        "kana" => "たなかいちろう"
    ];

    $this->request = $request;
    $formData = $this->request->get("name");

//    テストデータの各グループについてフィルタリング
    if($formData){
        foreach($testData as $index=>$test) {
            if ($test["name"] !== $formData && $test["company"] !== $formData && $test["kana"] !== $formData) {
                unset($testData[$index]);
            }
        }
    }

    return view('memberlist', [
        "testData" => $testData
    ]);
});

結果

  • フォームにデータがあれば当てはまる配列だけ残って表示される
  • フォームにデータがなければフィルタリングされないので全ての配列が表示される

補足

  1. あんまりif文は使わずにforeachで
  2. できるだけまとまりで渡して行って、最後はシンプルな配列をビューに渡す

といい感じになるらしい。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2