1

に変換し、私はJSONにモデルを変換する際に、すべての炭素日付フィールドがそうのようにキャストされていますLaravel:モデル中の炭素日付の変更フォーマット現在、JSON

"end_time": { 
    "date": "2017-02-03 23:59:00.000000", 
    "timezone_type": 3, 
    "timezone": "Europe/London" 
} 

は、私はそれがAtom表記法を使用してキャストしたいです。 $dateCarbon日付で

$order->end_time->toAtomString() 

: は、これはそうのような炭素で行うことができます。

どのようにモデルをJSONに変換する際に、アトム形式で変換することができますか?

私はそうのようにデータを追加することが可能であることを承知しています:https://laravel.com/docs/5.3/eloquent-serialization#appending-values-to-json

しかし、これは既存の値の書式を変更しませんか?

答えて

1

「end_time」とは異なる名前を使用したい場合は、指定したリンクが解決策になります。あなたは "end_time_formatted"、または同様のものを追加することができます。

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Event extends Model 
{ 

    protected $appends = ['end_time_formatted']; 

    public function getEndTimeFormattedAttribute() 
    { 
     return $this->end_time->toAtomString(); 
    } 
} 

その後、あなたはJSONにモデルをキャスト任意の時間は、それはそれで「end_time_formatted」が含まれます。

別のオプション(同じ名前を使用する必要がある場合)は、toJsonメソッドをモデルにコピーしてオーバーライドすることができます。私はおそらくこれに対して助言したいと思いますが、それをJSONにキャストする前に毎回$this->created_at = $this->created_at->toAtomString()と言う必要はありません。

/** 
    * Convert the model instance to JSON. 
    * 
    * @param int $options 
    * @return string 
    * 
    * @throws \Illuminate\Database\Eloquent\JsonEncodingException 
    */ 
    public function toJson($options = 0) 
    { 
     $atom = $this->created_at->toAtomString(); 
     $json = json_encode($this->jsonSerialize(), $options); 

     if (JSON_ERROR_NONE !== json_last_error()) { 
      throw JsonEncodingException::forModel($this, json_last_error_msg()); 
     } 
     $json = json_decode($json); 
     $json->created_at = $atom; 
     $json = json_encode($json); 

     return $json; 
    } 

は、私はこの方法の一番上に値を変更することで動作するようにこれを取得することができませんでしたので、私はその後、私には偉大な感じがしない再エンコードを、json_decode、とすることを余儀なくされました。このルートを使用している場合は、デコードする必要なしに動作させるために少し深く掘り下げることをお勧めします。

0

使用する代わりに、あなたはあなたがカーボンを使用したい形式に日付オブジェクトに変換するヘルパーメソッドを使用することができモデル

から受け取るあなたの日付をフォーマットすることです。

カーボンは、書式設定の能力を容易にし、私は、これはあなたが探しているものであると感じ:

your_function_name($created_at_date, $format = "jS M Y") 
{ 
    $carbon = new \Carbon\Carbon($created_at_date); 
    $formatted_date = $carbon->format($format); 

    return $formatted_date; 
    } 

・ホープ、このことができます。ゾンビを復活のリスクと

2

は、私はこの問題への代替解決策を提示しなければならない:

上書き形質HasAttributesによって定義serializeDate方法

/** 
* Prepare a date for array/JSON serialization. 
* 
* @param \DateTimeInterface $date 
* @return string 
*/ 
protected function serializeDate(DateTimeInterface $date) 
{ 
    return $date->toAtomString(); 
} 
関連する問題