ユアスク by みんなシステムズ

MENU

実践!LaravelでCarbonを使ってみる

2023/07/20

こんにちは、後藤です。

通販サイトや宿泊予約サイトを見ていると、「検索」や「並び替え」のボタンをよく目にしますよね。

今回はLaravelでCarbonを使って、日付での絞り込みと並び替えボタンの実装をダブルで紹介していきます。

Carbonとは

CarbonはPHPで日付と時間を扱うためのライブラリで、PHPの組み込みDateTimeクラスを拡張しています。Laravelフレームワークでは、このCarbonライブラリがデフォルトで含まれており、日付や時間に関連する操作を簡単かつ直感的に行うことができます。

Carbonの基本的な使用方法

以下にCarbonライブラリの基本的な使用方法の例を示します。

use Carbon\Carbon;

$now = Carbon::now(); // 現在の日付と時間を取得

$tomorrow = Carbon::now()->addDay(); // 明日の日付を取得

$lastWeek = Carbon::now()->subWeek(); // 一週間前の日付を取得

$specificDate = Carbon::create(2023, 7, 20, 0, 0, 0); // 特定の日付と時間を作成

$diff = $now->diffInDays($specificDate); // 現在から特定の日付までの日数差を計算

$formattedDate = $now->format('Y-m-d'); // 日付を特定の形式でフォーマット

いざ実践

ビューファイルの準備

例として、ID、名前の並び替えに加えて、日付の「今日」「明日」で絞り込みができるようなボタンをつくります。

まず、ビューファイルに以下のように記載します。

<!-- index.blade.php -->
<h1>データ一覧</h1>
<form method="GET" action="/">
  <select name="sort">
    <option value="">並び替え条件を選択</option>
    <option value="id_asc">ID昇順</option>
    <option value="id_desc">ID降順</option>
    <option value="name_asc">名前昇順</option>
    <option value="name_desc">名前降順</option>
  </select>
  <select name="date">
    <option value="">日付を選択</option>
    <option value="today">今日</option>
    <option value="tomorrow">明日</option>
  </select>
  <input type="submit" value="並び替え">
</form>
<!-- 以下省略 -->

コントローラの作成

次に、選択された項目に応じてデータをフィルタリングするようコントローラを更新します。

// App\Http\Controllers\DataController.php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Data;
use Carbon\Carbon;

class DataController extends Controller
{
    public function index(Request $request)
    {
        $sort = $request->sort;
        $date = $request->date;

        // ソート条件によってクエリを変更
        $query = Data::query();

        // ソート処理
        switch($sort){
            case 'id_asc':
                $query->orderBy('id', 'asc');
                break;
            case 'id_desc':
                $query->orderBy('id', 'desc');
                break;
            case 'name_asc':
                $query->orderBy('name', 'asc');
                break;
            case 'name_desc':
                $query->orderBy('name', 'desc');
                break;
            default:
                break;
        }

        // 日付フィルタリング処理
        switch($date){
            case 'today':
                $query->whereDate('date', Carbon::today());
                break;
            case 'tomorrow':
                $query->whereDate('date', Carbon::tomorrow());
                break;
            default:
                break;
        }

        $data = $query->get();

        // ビューにデータを渡す
        return view('index', compact('data'));
    }
}

このコードでは、Carbonライブラリを使用して現在の日付と翌日の日付を取得しています。その上で、whereDateメソッドを用いてデータベースから該当日のデータを取得します。

ルーティングの設定

最後に、作成したコントローラにルートを設定します。

// routes/web.php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\DataController;

Route::get('/', [DataController::class, 'index']);

以上で、並び替え条件を選択し、「並び替え」ボタンを押すと、選択した条件に基づいてデータが並び替えられます。この方法を用いると、ユーザーが自由に並び替え条件を選択し、データを昇順または降順に並べ替えることができます。この設計は、データ分析やデータ管理において非常に役立ちます。

まとめ

今回は、実践で使えそうな例を挙げてLaravelでCarbonを使う方法について紹介しました。施設の予約サイトなどを作りたいときに使えるかと思います。

みなさんもぜひ、Carbonを使って実践を重ねていきましょう!