前提
現在Laravel5.5を用いたAPIを作成しています.
JSONレスポンスの定義中にわからないことがあったので質問させていただきます.
実現したいこと
テーブルのデータを'year'
カラムでまとめた後に'month'
カラムでまとめてレスポンスに投げたいです.
以下のようなテーブルデータがあった時に
sql
1+------+-------+---------------------------------------------------------------------------------------------------------+ 2| year | month | people | 3+------+-------+---------------------------------------------------------------------------------------------------------+ 4 5| 2017 | 3 | 松本 知実 | 6| 2016 | 12 | 中島 春香,中津川 充,村山 裕樹,杉山 翼,中島 春香,木村 稔 | 7| 2017 | 3 | 桐山 裕太,吉本 稔,藤本 稔 | 8| 2015 | 3 | 喜嶋 学,若松 康弘,鈴木 直子,宮沢 幹 | 9| 2017 | 11 | 大垣 晃,江古田 里佳,野村 康弘,中村 美加子,喜嶋 裕太 | 10| 2016 | 6 | 中島 春香,中津川 充,村山 裕樹,杉山 翼,中島 春香,木村 稔 | 11| 2015 | 11 | 野村 英樹,工藤 智也,山本 七夏,青田 舞 |
次のようなJSONを返したいです.
json
1 2"2015" : { 3 "3" : { 4 "people" : "喜嶋 学,若松 康弘,鈴木 直子,宮沢 幹" 5 }, 6 "11" : { 7 "people" : "野村 英樹,工藤 智也,山本 七夏,青田 舞" 8 }, 9}, 10"2016" : { 11 "6" : { 12 "people" : "中島 春香,中津川 充,村山 裕樹,杉山 翼,中島 春香,木村 稔" 13 }, 14 "12" : { 15 "people" : "中島 春香,中津川 充,村山 裕樹,杉山 翼,中島 春香,木村 稔" 16 }, 17}, 18"2017" : { 19 "3" : { 20 [ 21 "people" : "松本 知実", 22 "people" : "桐山 裕太,吉本 稔,藤本 稔", 23 ] 24 }, 25 "11" : { 26 "people" : "大垣 晃,江古田 里佳,野村 康弘,中村 美加子,喜嶋 裕太" 27 }, 28}
簡易化しているので2017年の3月にpeople
キーが2つあるのは気にしないでください.
該当のソースコード
ソースコードは以下のようになっています.
php
1class PublicationResource extends Resource 2{ 3 /** 4 * Transform the resource into an array. 5 * 6 * @param \Illuminate\Http\Request $request 7 * @return array 8 */ 9 public function toArray($request) 10 { 11 return [ 12 $this->year => [ 13 $this->month => [ 14 'people' => $this->people, 15 'title' => $this->title, 16 'journal' => $this->journal, 17 'volume' => $this->volume, 18 'number' => $this->number, 19 'category' => $this->type->category, 20 ], 21 ], 22 ]; 23 } 24}
php
1class PublicationController extends Controller 2{ 3 public function index() 4 { 5 $publications = Publication::with('type') 6 ->orderBy('year', 'DESC') 7 ->orderBy('month', 'DESC') 8 ->get(); 9 return PublicationResource::collection($publications); 10 } 11}
現状のJSONレスポンス
上記のソースコードで実行すると,レスポンスは
JSON
1 2"2017": { 3 "11": { 4 "people": "大垣 晃,江古田 里佳,野村 康弘,中村 美加子,喜嶋 裕太" 5 } 6}, 7"2017": { 8 "3": { 9 "people": "松本 知実" 10 } 11}, 12"2017": { 13 "3": { 14 "people": "桐山 裕太,吉本 稔,藤本 稔" 15 } 16}, 17"2016": { 18 "12": { 19 "people": "中島 春香,中津川 充,村山 裕樹,杉山 翼,中島 春香,木村 稔" 20 } 21}, 22"2016": { 23 "6": { 24 "people": "中島 春香,中津川 充,村山 裕樹,杉山 翼,中島 春香,木村 稔" 25 } 26}, 27"2015": { 28 "11": { 29 "people": "野村 英樹,工藤 智也,山本 七夏,青田 舞" 30 } 31}, 32"2015": { 33 "3": { 34 "people": "喜嶋 学,若松 康弘,鈴木 直子,宮沢 幹" 35 } 36},
このようになり,year
カラムとmonth
カラムが共通している部分をまとめてくれません.
どのように修正すればいいでしょうか?
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。