laravel에서 검색 기능 구현
사용자 모델은name(사용자 이름),stength(기력),tactics(좋아하는 전술)라는 열을 정의합니다.
class User extends Authenticatable
{
protected $fillable = [
'name','strength','tactics',
];
}
컨트롤러는 다음과 같은 index 방법을 정의합니다.class SearchController extends Controller
{
public function index(Request $request){
$query = User::query();
//$request->input()で検索時に入力した項目を取得します。
$search1 = $request->input('strength');
$search2 = $request->input('tactics');
$search3 = $request->input('name');
// プルダウンメニューで指定なし以外を選択した場合、$query->whereで選択した棋力と一致するカラムを取得します
if ($request->has('strength') && $search1 != ('指定なし')) {
$query->where('strength', $search1)->get();
}
// プルダウンメニューで指定なし以外を選択した場合、$query->whereで選択した好きな戦法と一致するカラムを取得します
if ($request->has('tactics') && $search2 != ('指定なし')) {
$query->where('tactics', $search2)->get();
}
// ユーザ名入力フォームで入力した文字列を含むカラムを取得します
if ($request->has('name') && $search3 != '') {
$query->where('name', 'like', '%'.$search3.'%')->get();
}
//ユーザを1ページにつき10件ずつ表示させます
$data = $query->paginate(10);
return view('users.search',[
'data' => $data
]);
}
}
검색 버튼을 누를 때의 라우팅은 다음과 같습니다.//検索ボタンを押すとコントローラのindexメソッドを実行します
Route::get('Search','SearchController@index')->name('search');
사용자 검색 페이지의 보기는 다음과 같습니다. <div class="row">
<div class="col-sm-4">
<div class="text-center my-4">
<h3 class="brown border p-2">ユーザ検索</h3>
</div>
{!! Form::open(['route' => 'search', 'method' => 'get']) !!}
<div class="form-group">
{!! Form::label('text', 'ユーザ名:') !!}
{!! Form::text('name' ,'', ['class' => 'form-control', 'placeholder' => '指定なし'] ) !!}
</div>
<div class="form-group">
{!! Form::label('strength', '棋力:') !!}
{!! Form::select('strength', ['指定なし' => '指定なし'] + Config::get('strength.kiryoku') ,'指定なし') !!}
</div>
<div class="form-group">
{!! Form::label('tactics', '好きな戦法:') !!}
{!! Form::select('tactics', ['指定なし' => '指定なし'] + Config::get('tactics.senpou') , '指定なし') !!}
</div>
{!! Form::submit('検索', ['class' => 'btn btn-primary btn-block']) !!}
{!! Form::close() !!}
</div>
<div class="col-sm-8">
<div class="text-center my-4">
<h3 class="brown p-2">ユーザ一覧</h3>
</div>
<div class="container">
<!--検索ボタンが押された時に表示されます-->
@if(!empty($data))
<div class="my-2 p-0">
<div class="row border-bottom text-center">
<div class="col-sm-4">
<p>ユーザ名</p>
</div>
<div class="col-sm-4">
<p>棋力</p>
</div>
<div class="col-sm-4">
<p>好きな戦法</p>
</div>
</div>
//検索条件に一致したユーザを表示します
@foreach($data as $item)
<div class="row py-2 border-bottom text-center">
<div class="col-sm-4">
<a href="">{{ $item->name }}</a>
</div>
<div class="col-sm-4">
{{ $item->strength }}
</div>
<div class="col-sm-4">
{{ $item->tactics }}
</div>
</div>
@endforeach
</div>
{{ $data->appends(request()->input())->render('pagination::bootstrap-4') }}
@endif
</div>
</div>
</div>
여기, 아래와 같이 미리strength를 보여 줍니다.php를 만들고 "kiryoku"라는 그룹을 정의합니다.위 보기에서 config::get ("strength.kiryoku") 에서 이 그룹을 검색하고 밑에 있는 메뉴를 만듭니다.이 밖에 ['指定なし' => '指定なし'] + config::get('strength.kiryoku')
kiryoku 그룹에'무지정'이라는 요소를 추가했다.config/strength.php
<?php
return array(
'kiryoku' => array(
'10級' => '10級',
'9級' => '9級',
'8級' => '8級',
'7級' => '7級',
'6級' => '6級',
'5級' => '5級',
'4級' => '4級',
'3級' => '3級',
'2級' => '2級',
'1級' => '1級',
'初段' => '初段',
'二段' => '二段',
'三段' => '三段',
'四段' => '四段',
'五段' => '五段',
'六段' => '六段',
),
);
?>
config:get('tactics.senpou')도 마찬가지입니다.config/tactics.php
<?php
return array(
'senpou' => array(
'角換わり' => '角換わり',
'矢倉' => '矢倉',
'相掛かり' => '相掛かり',
'横歩取り' => '横歩取り',
'向かい飛車' => '向かい飛車',
'三間飛車' => '三間飛車',
'四間飛車' => '四間飛車',
'中飛車' => '中飛車'
),
);
?>
사용자 이름만 사용하여 검색할 때 다음과 같이 올바르게 표시됩니다.또 기력, 좋아하는 전법으로 검색한 경우에도 다음과 같은 내용이 정확하게 드러났다.
이번 검색 기능의 요점은 컨트롤러의
$request->input
방법과 $query->where
방법이라고 생각합니다.또한 밑에 있는 메뉴의 구현은 config 파일을 사용했지만 의외로 실패했습니다.밑에 있는 메뉴는 다른 방법으로 더욱 간단하게 실현할 수 있을 것이다.
Reference
이 문제에 관하여(laravel에서 검색 기능 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/banku/items/4ac99f9a48d2fc862255텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)