各種機能追加2

各種機能追加


今回は、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');
});


これでボタンを押したら並びが変わることを確認してみましょう。

カテゴリー

アーカイブ

Close Bitnami banner
Bitnami