web-dev-qa-db-ja.com

Laravel created_atは、データベースの日付形式の代わりにオブジェクトを返しますか?

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"
}

この問題を修正するにはどうすればよいですか?

10
Abhishek Badole

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();
9
Prashant Barve

デフォルトではcreated_atおよびupdated_atCarbonオブジェクトなので、次のことができます。

$object->created_at->toDateTimeString();

再びフォーマットY-m-d H:i:s

13

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');
        });
    }

    ...

}
3
YouneL

JSONレスポンスを取得したいので、 Eloquent API Resource を使用して、Carbonオブジェクトを任意の形式に変換できます。例:

return [
    'created_at' => $this->created_at->toDateTimeString(),
    ....
];
3
Alexey Mezenin