10
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Laravel】Sortableを使用して簡単にソート機能を実装

Posted at

はじめに

データ一覧画面でソート機能を付けたいなぁ。
よし、JavaScriptを使ってごそごそして~...ってめちゃくちゃ面倒!!
ってことがあったので、ソート機能が簡単に実装できるパッケージを紹介します。

開発環境

OS Windows10
PHP 7.4.7
Laravel 8.45.1

事前準備

先ずはcomposerから、今回使用する「kyslik/column-sortable」のパッケージを追加します。
$ composer require kyslik/column-sortable
##開発
大まかなフローとして、
①ModelにSortableを宣言
②ControllerでDBからデータを取得
③Viewで表示
となります。

###①ModelにSortableを宣言
対象のModelにSortableをuse宣言します。

Models/Post.php
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Kyslik\ColumnSortable\Sortable; // 追加

class Post extends Model
{
    use Sortable;  // 追加
}

###②ControllerでDBからデータを取得
ControllerにSortableのクエリビルダを追加します。

Controllers/PostsController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Post;

class PostsController extends Controller
{

    public function index()
    {
        $posts = Post::sortable()->get(); //sortable() を先に宣言
        return view('posts.index')->with('posts', $posts);
    }
    .
    .
    .
}

###③Viewで表示
テーブル構造のカラムに該当する部分にSrotable linkを付与します。
記法は下記になります。
@sortablelink('*column_name*', '*カラム名称*')

posts/index.blade.php
<div>
    <table class="table table-bordered">
        <thead>
        <tr>
            <th scope="col">@sortablelink('id', 'ID')</th>
            <th scope="col">@sortablelink('title', 'タイトル')</th>
            <th scope="col">@sortablelink('text', '本文')</th>
            <th scope="col">@sortablelink('created_at', '作成日時')</th>
            <th scope="col">@sortablelink('updated_at', '更新日時')</th>
        </tr>
        </thead>
        <tbody>
        @foreach($posts as $post)
        <tr>
            <th scope="row">{{ $post->id }}</th>
            <td>{{ $post->title }}</td>
            <td>{{ $post->text }}</td>
            <td>{{ $post->created_at }}</td>
            <td>{{ $post->updated_at }}</td>
        </tr>
        @endforeach 
        </tbody>
    </table>
    </div>
</div>

デモ

Animation.gif

終わりに

何か機能を追加したい!という場合は大体パッケージとして落ちているので、実装する前に探してみると良いと思います。
今回のソート機能はページネーションとも併せて使用できるので、お勧めです!

Github reference

10
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?