7

私は API を構築しており、created_at、deleted_at などのすべてのタイムスタンプを、実際の日時だけでなくタイムゾーンも含む複雑なオブジェクトとして返したいと考えています。コントローラーで既に {Carbon/Carbon} を使用しています。モデルにも日付フィールドを定義しました。コントローラーで日付フィールドにアクセスすると、実際に Carbon オブジェクトが取得されます。しかし、結果セットを JSON として返すと、datetime 文字列しか表示されません。タイムゾーンではありません。

現在の JSON

{
    "id": 4,
    "username": "purusScarlett93",
    "firstname": null,
    "lastname": null,
    "language_id": 1,
    "pic": null,
    "email": null,
    "authtoken": "f54e17b2ffc7203afe345d947f0bf8ceab954ac4f08cc19990fc41d53fe4eef8",
    "authdate": "2015-05-27 12:31:13",
    "activation_code": null,
    "active": 0,
    "devices": [],
    "sports": []
}

私の願い :)

{
  "id": 4,
  "username": "purusScarlett93",
  "firstname": null,
  "language_id": 1,
  "pic": null,
  "email": null,
   "authtoken":"f54e17b2ffc7203afe41d53fe4eef8",
   "authdate": [
     {
       "datetime": "2015-05-27 12:31:13",
       "timezone": "UTC+2"
     }
   ],
   "activation_code": null,
   "active": 0
 }

ここで何が欠けているのか分かりますか?

4

2 に答える 2

1

これは、オブジェクトを文字列 (つまり JSON) に変換しようとするとトリガーされる関数がすべてのCarbonオブジェクトにあるためです。__toString()モデルに、文字列の代わりにカスタム配列を提供する独自のアクセサーを作成できるかどうかを確認してください。

public function getAuthdateAttribute(Carbon $authdate) {
   return [
           'datetime' => $authdate->toDateTimeString(),
           'timezone' => 'UTC' . $authdate->offsetHours
          ];
}

ユーザー Alariva が指摘しているように、このメソッドはデフォルトのアクセス方法をオーバーライドしますauthdate。元のオブジェクトにアクセスしたい場合Carbonは、そのための特別なメソッドを作成する必要があるかもしれません。

または、少し賢く、次のようにすることもできます。

public function getAuthdateAttribute(Carbon $authdate) {
   return [
           'datetime' => $authdate,
           'timezone' => 'UTC' . $authdate->offsetHours
          ];
}

次に、元のオブジェクトにアクセスします。$carbon = $this->authdate['datetime']

于 2015-07-12T11:33:04.433 に答える
0

モデル内に次のような関数を追加してみてください。

public function getAuthDateAttribute() {
  return [
   "datetime" => "2015-05-27 12:31:13",
   "timezone" => "UTC+2"
 ];}
于 2015-07-12T09:36:09.233 に答える