Laravelで検索フォームを実装してみます。
準備
一部書き換えていますが、以前投稿した下記記事をベースに進めます。
Laravelでページネーションを実装してみる | cly7796.net
テーブルは以下のような内容になっています。
まずはデータベースからデータを取得して、一覧を表示させてみます。
app\Animation.php
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Autumn2016 extends Model { protected $table = 'autumn2016s'; }
app\Http\routes.php
Route::get('/search', 'SearchController@getIndex');
app\Http\Controllers\SearchController.php
<?php namespace App\Http\Controllers; use App\Autumn2016; class SearchController extends Controller { public function getIndex() { $data = Autumn2016::get(); return view('search.index', compact('data')); } }
resources\views\search\index.blade.php
@foreach($data as $item) <div> <div>{{{ $item->id }}}</div> <div>{{{ $item->title }}}</div> <div>{{{ $item->category }}}</div> <div>{{{ $item->production }}}</div> <div>{{{ $item->actor }}}</div> </div> <hr> @endforeach
データベースから取得したデータがすべて表示されました。
検索フォームの追加
検索フォームを追加して、データを絞り込めるようにしてみます。
resources\views\search\index.blade.php
{!! Form::open(['method' => 'GET']) !!} {!! Form::text('s', null) !!} {!! Form::submit('検索') !!} {!! Form::close() !!} @foreach($data as $item) <div> <div>{{{ $item->id }}}</div> <div>{{{ $item->title }}}</div> <div>{{{ $item->category }}}</div> <div>{{{ $item->production }}}</div> <div>{{{ $item->actor }}}</div> </div> <hr> @endforeach
app\Http\Controllers\SearchController.php
<?php namespace App\Http\Controllers; use App\Autumn2016; use Request; class SearchController extends Controller { public function getIndex() { // 検索するテキスト取得 $search = Request::get('s'); $query = Autumn2016::query(); // 検索するテキストが入力されている場合のみ if(!empty($search)) { $query->where('title', 'like', '%'.$search.'%'); } $data = $query->get(); return view('search.index', compact('data', 'search')); } }
検索前は全件の一覧が表示されます。
「あ」で検索すると、以下のように絞られた状態で表示されました。
【参考サイト】
コメントが承認されるまで時間がかかります。