--> -->

skimemo


skimemo - 日記/2022-05-14/LaravelでModelからのデータをtoArray()するとtimezoneがUTCになってしまう問題 のバックアップの現在との差分(No.1)


  • 追加された行はこの色です。
  • 削除された行はこの色です。
#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: &#x5b;[[Linux>日記/Category/Linux]]&#x5d; - 10:44:05
----
RIGHT:&blog2trackback();
#comment(above)
#blog2navi()