--> -->
#blog2navi() *LaravelでModelからのデータをtoArray()するとtimezoneがUTCになってしまう問題 [#b44a2654] * 概要 [#ue0d6d62] タイトルのまんまです。~ Modelからtimestamp型のデータを取得して、配列で扱おうと以下のように &inlinecode{->toArray()};すると、日付がUTCになってしまいます。~ #code(PHP){{{ $result = Reservation::where('userid',1) ->orderBy('send_datetime','desc') ->limit(1)->get(); print_r($result->toArray()); }}} [updated_at] => "2022-05-13T23:00:16.000000Z" ほんとは [updated_at] => 2022-05-14 08:00:16 になって欲しい。~ ~ もちろん、&inlinecode{config/app.php};の timezone や、&inlinecode{config/database.php};の timezone や、モデルの&inlinecode{protected $dates =};の設定をしてもです。 * 解決方法 [#abba13f5] + App\Models\Models を作成します #code(PHP){{{ <?php namespace App\Models; use DateTimeInterface; use Illuminate\Database\Eloquent\Model; class Models extends Model { // タイムゾーンを適用するフィールド protected $dates = ['updated_at',]; // toArray()したときに日付をUTCにしないためのoverride protected function serializeDate(DateTimeInterface $date): string { return $date->format('Y-m-d H:i:s'); } } }}} + モデル側でこいつをextendsします #code(PHP){{{ <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Builder; class Reservation extends Models { use HasFactory; use Encryptable; /** * 予約一覧を取得 * @return array */ public function getReservationAll(): array { return Reservation::get()->toArray(); } } }}} いじょです。 * 参考文献 [#ve4cc8b7] Wrong timezone with Eloquent Model timestamps on $model->get(), but correct with print_r()~ https://stackoverflow.com/questions/63549021/wrong-timezone-with-eloquent-model-timestamps-on-model-get-but-correct-with #htmlinsert(twitterbutton.html) RIGHT:Category: [[[Linux>日記/Category/Linux]]] - 10:44:05 ---- RIGHT:&blog2trackback(); #comment(above) #blog2navi()