各種機能追加
今回は、priority カラムに保存されているデータ(1~5) で並べ替える処理を実装していきます。
デフォルトでは降順、つまり重要度の高いものから順に並ぶようにします。
まずは、 TodoController の indexAction を以下のように編集してください。
public function index(Request $request) { $cond_title = $request->cond_title; if ($cond_title != '') { // 検索されたら検索結果を取得する $todos = Todo::where('title', $cond_title)->get(); } else { // それ以外はすべてを取得する $todos = Todo::where('is_complete', 0) ->orderBy('priority', 'desc') ->get();; } return view('todo.index', ['todos' => $todos, 'cond_title' => $cond_title]); }
->orderBy('priority', 'desc')
desc というのが降順という意味でここでは priority を指定しています。
これで、デフォルトでは降順で並ぶように設定しましたので、これを昇順に並べ替える機能をつけていきます。
TodoController に sortAction を追加してください。
public function sort(Request $request) { $cond_title = $request->cond_title; $todos = Todo::where('is_complete',0) ->orderBy('priority', 'asc') ->get(); return view('todo.index', ['todos' => $todos, 'cond_title' => $cond_title]); }
こちらのAction では、先ほどのindexAction では
->orderBy('priority', 'desc')
としましたが、今回は昇順にしたいので、
->orderBy('priority', 'asc')
とします。
TodoController の indexAction と sortAction を実装できたら、最後にボタンを設置して切り替えできるようにしていきましょう。
index.blade.php に切り替えボタンを設置していきます。
@extends('layouts.layouts') @section('title', 'todos一覧') @section('content') <div class="container"> <div class="row"> <h2>Todos一覧</h2> </div> <div class="row"> <div class="col-md-4"> <a href="{{ action('TodoController@add') }}" role="button" class="btn btn-primary">新規作成</a> </div> <div class="col-md-8"> <form action="{{ action('TodoController@index') }}" method="get"> <div class="form-group row"> <label class="col-md-2">タイトル</label> <div class="col-md-8"> <input type="text" class="form-control" name="cond_title" value="{{ $cond_title }}"> </div> <div class="col-md-2"> {{ csrf_field() }} <input type="submit" class="btn btn-primary" value="検索"> </div> <ul class="sort"> <li><a href="{{ action('TodoController@add') }}" role="button">新規作成</a></li> <li><a href="{{ action('TodoController@sort') }}" role="button">重要度昇順↑</a></li> <li><a href="{{ action('TodoController@index') }}" role="button">重要度降順↓</a></li> </ul> </div> </form> </div> </div> <div class="row"> <div class="list-news col-md-12 mx-auto"> <div class="row"> <table class="table table-dark"> <thead> <tr> <th>ID</th> <th>タイトル</th> <th>場所</th> <th>期限</th> <th colspan="2">重要度</th> </tr> </thead> <tbody> @foreach($todos as $todo) <tr> <td>{{ $todo->id }}</td> <td>{{ str_limit($todo->title, 100) }}</td> <td>{{ str_limit($todo->space, 100) }}</td> <td>{{ str_limit($todo->deadline, 100) }}</td> <td>{{ str_limit($todo->priority, 100) }}</td> <td> <div> <a href="{{ action('TodoController@edit', ['id' => $todo->id]) }}">編集</a> </div> <div> <a href="{{ action('TodoController@delete', ['id' => $todo->id]) }}">削除</a> </div> <div> <a class="mod-btn" href="{{ action('TodoController@complete', ['id' => $todo->id]) }}">完了</a> </div> </td> </tr> @endforeach </tbody> </table> </div> </div> </div> </div> @endsection
最後にRouting を設定していきます。
web.php を編集してください。
Route::group(['middleware' => 'auth'], function() { Route::get('todo/create', 'TodoController@add'); Route::post('todo/create', 'TodoController@create'); Route::get('todo', 'TodoController@index'); Route::get('todo/edit', 'TodoController@edit'); Route::post('todo/edit', 'TodoController@update'); Route::get('todo/delete', 'TodoController@delete'); Route::get('todo/complete', 'TodoController@complete'); Route::get('todo/complete_list', 'TodoController@complete_list'); Route::get('todo/incomplete', 'TodoController@incomplete'); Route::get('todo/sort', 'TodoController@sort'); });
これでボタンを押したら並びが変わることを確認してみましょう。