【Laravel】여러 조건의 필터 검색 기능

7788 단어 PHP라라벨Laravel6

하고 싶은 일



Laravel에서 users 테이블에 대해 여러 조건으로 필터링 검색 기능을 구현합니다. 이번에는 '이름'과 '성별'을 검색할 수 있습니다.

전제


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

  • ■uses 테이블


    컬럼
    금형
    코멘트


    sei
    VARCHAR


    mei
    VARCHAR
    이름

    family_name
    VARCHAR
    성(가나)

    last_name
    VARCHAR
    이름(카나)

    sex
    INT
    성별(1:남, 2:여)


    보기





    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,
        ]);
    }
    
    

    참고


  • htps : // 기주 b. 코 m / 유타 1988 / 슈세키 군
  • ぇtps://레아도 bぇ. 이 m/ぁらゔぇl/6. x/그럼/에쿠엔 t. HTML
  • h tps:// 퀵했다. 작은 m / 원시 삼촌 / MS / 11b65cb6b7 그림 변경 FC23 그림
  • 좋은 웹페이지 즐겨찾기