LoginSignup
17
24

More than 3 years have passed since last update.

【Laravel】複数条件の絞り込み検索機能

Last updated at Posted at 2020-08-15

やりたいこと

Laravelでusersテーブルに対して複数の条件で絞り込み検索機能を実装します。今回は、「名前」「性別」を検索できるようにします。

前提

  • PHP7.2
  • Laravel6.1
  • MySQL5.7

■usesテーブル

カラム コメント
sei VARCHAR
mei VARCHAR
family_name VARCHAR 性(カナ)
last_name VARCHAR 名(カナ)
sex INT 性別(1:男, 2:女)

ビュー

スクリーンショット 2020-08-15 14.27.23.png

user/index.blade.php
<?php
 $sex = ['男' => 1, '女' => 2];
?>

<form>
  <input name="keyword" type="text" placeholder="キーワードを入力" value="{{ $params['keyword'] ?? null }}">
  <select class="form-control" name="gender">
    <option selected="selected" value="">選択してください</option>
    @foreach($sex as $key => $value)
      <option value="{{ $value }}" {{ isset($params['sex']) && $params['sex'] == $value ? 'selected': null }}>
        {{ $key }}
      </option>
    @endforeach
  <button type="submit">検索する</button>
</form>

モデル

今回はLaravelのクエリスコープを活用します。

User.php
/**
 * 絞り込み・キーワード検索
 * @param \Illuminate\Database\Eloquent\Builder
 * @param array
 * @return \Illuminate\Database\Eloquent\Builder
 */
public function scopeSerach(Builder $query, array $params): Builder
{
    // 性別絞り込み
    if (!empty($params['gender'])) $query->where('gender', $params['gender']);

    // キーワード検索
    if (!empty($params['keyword'])) {
        $query->where(function ($query) use ($params) {
            $query->where('sei', 'like', '%' . $params['keyword'] . '%')
                ->orWhere('mei', 'like', '%' . $params['keyword'] . '%')
                ->orWhere('family_name', 'like', '%' . $params['keyword'] . '%')
                ->orWhere('last_name', 'like', '%' . $params['keyword'] . '%');
        });
    }

    return $query;
}

コントローラ

UserController.php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\User;

public function index(Request $request)
{
    $params = $request->query();

    $users = User::serach($params)->get();

    return view('admin.user.index')->with([
        'users' => $users,
        'params' => $params,
    ]);
}

参考

17
24
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
17
24