2017-07-11 16 views
2

laravelのJSON出力をグループ化/並べ替えることは可能ですか?私はシステムで表示する前にそれをグループ化したいので、私はそれがクライアント側ではなくサーバー側で行われる必要があります。Laravel 5.4でJson出力をグループ化する方法は?

できますが、私はこのようなJSONを構造化していると述べた:

id, name, date

かの例では、このようなものです:

[[ 
{"id" : "1", "name" : "A", "date" : "2017-01-01"}, 
{"id" : "2", "name" : "B", "date" : "2017-01-01"}, 
{"id" : "3", "name" : "C", "date" : "2017-01-01"}, 
{"id" : "4", "name" : "D", "date" : "2018-01-01"}, 
{"id" : "5", "name" : "E", "date" : "2018-01-01"}, 
]] 

が、それはこのようなものにするためにグループにそれは可能ですか?

[ 
    {"2017-01-01":[ 
     {"id":"1","name":"A"}, 
     {"id":"2","name":"B"}, 
     {"id":"3","name":"C"} 
    ]}, 
    {"2018-01-01":[ 
     {"id":"4","name":"D"}, 
     {"id":"5","name":"E"}, 
    ]}, 
] 

は(場合は、あなたが私のJSONコントローラーを見てする必要があります)これは私のJSONコントローラーです:

public function harga($id) 
{ 
    $harga = harga::whereHas('produk', function ($query) use($id) { 
    $query->where('id',$id); 
    })->get(); 
    return response()->json([$harga],200); 
} 

ありがとう!クエリの

答えて

3

使用GROUPBY:

public function harga($id) 
{ 
    $harga = harga::whereHas('produk', function ($query) use($id) { 
    $query->where('id',$id); 
    })->get()->groupBy(column_name_you_want_to_group_by); 
    return response()->json([$harga],200); 
} 
+0

おかげで以下のようにそれを行うことが可能です、その仕事、私はそれがLaravelでそれが容易であることを知らない。また、私のコントローラのコードに書き込んでくれてありがとう。 :) – vl14b

2

あなたはそれを行うにはgroupByメソッドを使用することができます:コントローラで

return response()->json($harga->groupBy('date'), 200); 
+0

ニースの答えは、正解ですが、誰もがすでに同じ時間にあなたよりも完全な答えに答えているので、私は傾けることはできません。とにかく助けてくれてありがとう! – vl14b

0

js = "your json"; 
$jsArray = json_decode($js, true); 
    $jsArray = $jsArray[0]; 
    $newJsArr = []; 
    foreach ($jsArray as $j) { 
     $newJsArr[$j['date']][] = ["id" => $j['id'], "name" => $j['name']]; 
    } 
    $newJsArr = json_encode([$newJsArr]); 
関連する問題