2017-06-20 3 views
0

こんにちは、私は私のデータベースに格納していますが、私のモデルで私のgetメソッドを使用すると私はデータをformatingときにjson_decodeを2回使用する必要があります何とか一度それを使用してください。正確デシベルでLaravel Modelデコード方法を取得するJSON

JSON:

public function getshippingAttribute() 
{ 
    return $this->attributes['shipping'] ? json_decode(json_decode($this->attributes['shipping'])) : []; 
} 

答えて

-1

てみリターンJSONレスポンスの問題は、あなたの質問が、Laravelから十分に明確ではありません

public function getshippingAttribute() 
{ 
    return response()->json($this->attributes['shipping']) 
} 
+0

これを行うと、Ajax呼び出しのヘッダー属性のみを含む空のオブジェクトが生成されるため、このオプションはデータベース呼び出しを行っていないため機能しません。フィールドの出力をフォーマットしています – ONYX

+0

ドキュメント jsonメソッドは自動的にContent-Typeヘッダをapplication/jsonに設定し、json_encode PHP関数を使用して指定された配列をJSONに変換します: – MrCharif

+0

おそらく変数がnullです – MrCharif

1

"[{\"id\":\"1\",\"country\":\"New Zealand\",\"shipping_rate\":\"1\"},{\"id\":\"2\",\"country\":\"Australia\",\"shipping_rate\":\"2\"}]" 

モデルは、メソッドを取得します。属性キャスト用の組み込みメカニズムを提供しています(v-5.1以降)。この場合は、お使いのモデルでは、ちょうど例えば$castsプロパティを宣言:$castsプロパティは、上記の、あなたが書くつもりたびモデルを(作成/更新)ので

protected $casts = [ 
    'shipping' => 'array', 
    // more ... 
]; 

、あなたがする必要はありません明示的にjson_encodeを使用して配列をjson文字列に変換すると、Laravelがそれを行います。また、モデル(単一/コレクション)を取得すると、shipping属性は自動的にarrayに変換されます属性の操作にはjson_decodeを使用します。

レスポンスに関しては、jsonに手動で変換しないと(model/collectionを返すとき)laravelによっても処理されます。これはあなたの問題を解決する可能性があります。