LaravelのJSONレスポンスでusersテーブルからcreated_at
datetimeを返そうとしています。
私のデータベースでは、値は2016-07-18 00:00:00
として表示されますが、JSON APIで返そうとすると、
{
date: "2016-07-18 00:00:00.000000",
timezone_type: 3,
timezone: "UTC"
}
この問題を修正するにはどうすればよいですか?
Carbon
in Laravel以下のコードを使用して、必要な日時を作成するのに役立つフレームワークがあります。
$created_at = new Carbon($value)->toDateTimeString();
$created_at
の場所created_at
。ユーザーテーブルのサンプルコード(注:テストされていないため、オブジェクトまたは配列を渡す必要があることを確認してください)
$user = User::find(1);
$user->created_at = new Carbon($user->created_at)->toDateTimeString();
デフォルトではcreated_at
およびupdated_at
はCarbon
オブジェクトなので、次のことができます。
$object->created_at->toDateTimeString();
再びフォーマットY-m-d H:i:s
serializeUsing
メソッドを追加することで、この動作を変更できます。AppServiceProvider
クラスで、日付のjsonシリアル化形式を更新します。API呼び出しにのみ影響します( docs )。例:
use Illuminate\Support\Carbon;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
Carbon::serializeUsing(function ($carbon) {
return $carbon->format('Y-m-d H:i:s');
});
}
...
}
JSONレスポンスを取得したいので、 Eloquent API Resource を使用して、Carbonオブジェクトを任意の形式に変換できます。例:
return [
'created_at' => $this->created_at->toDateTimeString(),
....
];