[PHP][Laravel] 【UTC対応】Eloquent ミューテタを使ってDBデータ取得時にタイムゾーンの日時に変換する
バージョン
Laravel 5.7
概要
Eloquentミューテタを使ってDBに登録されているUTC日時をユーザのタイムゾーン日時に変換して取得させる。
ミューテタを使えば日時だけでなく小文字大文字変換など色々できるので下記でご確認。
readouble.com
コード
mutate関数を作成。場所はmiddleware配下でもapp配下の共通クラスでも良い。
例ではapp/Utils配下とする。
■UtilDate.php
use Carbon\Carbon; class UtilDate { public static function mutate($value) { // デフォルトタイムゾーン(UTCとする) $date = new Carbon($value, 'UTC'); if (Auth::check()) { // Usersテーブルに関連したUser_Profilesテーブルにtimezoneカラムがあるとする $timezone = Auth::user()->load('userProfile')->userProfile->timezone; $date->setTimezone($timezone); } return $date; } }
User_Profilesテーブルからの値取得については下記に記載。
waterfalls.hatenablog.com
日時変換したいModelのミューテタでmutate関数を呼ぶ。
■Model
class LoginInfo extends Model { // 日時変換対象のカラムを指定 protected $dates = [ 'created_at', 'updated_at', 'deleted_at' ]; // カラム一つ一つにgetColumnNameAttributeを呼ぶ public function getCreatedAtAttribute($date) { return UtilDate::mutate($date); } public function getUpdatedAtAttribute($date) { return UtilDate::mutate($date); } public function getDeletedAtAttribute($date) { return UtilDate::mutate($date); } }
これで該当ModelからDB参照すれば日時が指定タイムゾーンで変換される。
- 作者: 掌田津耶乃
- 出版社/メーカー: 秀和システム
- 発売日: 2017/09/16
- メディア: 単行本
- この商品を含むブログを見る