#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()