2016-08-22 1 views
1

VueJSフロントエンドSPA用にLaravelを使用してAPIを構築しています。Laravel - コレクションがJSONとして返されたときにアクセサが動作しない

DBに保存されている日付を「Y-m-d」ではなく「d-m-Y」として受け入れて返す必要があります。 データミューテータは大丈夫働いていると私は、与えられた日付と正しく を、それを保存するために管理が、私は実行すると:

$active = Announcement::where('group_id', $this->user->group_id)->where('dateTo', '>=', Carbon::today())->get(); 
     return response()->json($active); 

私はそれがフォーマットされた取得するのではなく、純粋なDBのデータを取得しています。

public function getDateToAttribute($value) 
    { 
     $date = Carbon::createFromFormat('Y-m-d', $value); 
     return $date->format('d-m-Y'); 
    } 

私は何をすべき: は、たとえば、私はフォーマットする必要がありますdateToフィールドがありますか?

答えて

1

を試してみてください

$active = Announcement::where('group_id', $this->user->group_id)->where('dateTo', '>=', Carbon::today())->get(); 

return response()->json($active->toArray()); 
0

Laravelは、モデルを配列またはjsonに変換するときにアクセサを実行します。

だから、私はあなたのコードを更新します:@Jaredはあなたに呼び出されたときにアクセサ/ミューテータだけ存在し、言ったように、この

$active = Announcement::where('group_id', $this->user->group_id)->where('dateTo', '>=', Carbon::today())->get(); 
    foreach($active as $activeRecords){ 
     print_r($activeRecords->dateTo); 
    } 

属性

public function getDateToAttribute($value) 
{ 
    return Carbon::parse($value)->format('d-m-Y'); 
} 
+0

アクセッサーをまだ通過していない... JSONに変換中であるため、toArrayを使わないでこのことを行う必要があります... –

+0

そうです。 これをより詳しく見ると、あなたの日付フィールドは 'dateTo'ではなく' dateTo'です。 Laravelは、あなたのフィールド名が期待するフォーマット、すなわち 'date_to'と一致する場合にのみ、自動アクセサーを実行します。 –

0

応用。したがって、JSONとして返されるコレクションでは、アクセサ/ミューテータは存在しません。 すべての必要なアクセサ/ミューテーターを呼び出すためのループがwaaayあまりにも脂肪ですが、Laravelは、モデルAnnouncement.phpに内蔵されたソリューション

が付属していてください、あなただけ常に上に追加されますアクセサ/ミューテーターを指定する必要があなたの要求。

このソリューションでは、各リクエストにはdateToパラメータが含まれ、好きなように整形されます。

greets!

PS:あなたはあなたの要求に応じて、$appends配列の変更を行うことができますので、JSONを返すすべてのリクエストは、dateToパラメータを送信しますが、他はしません。

関連する問題