【Laravel】여러 조건의 필터 검색 기능
하고 싶은 일
Laravel에서 users 테이블에 대해 여러 조건으로 필터링 검색 기능을 구현합니다. 이번에는 '이름'과 '성별'을 검색할 수 있습니다.
전제
■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,
]);
}
참고
Reference
이 문제에 관하여(【Laravel】여러 조건의 필터 검색 기능), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yuta_sawamura/items/691818b3de5b87432ac9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)