前提
LaravelでAPI開発をしています。
レスポンスするjsonデータをより綺麗に加工したいと考え投稿させて頂きました。
現在は以下のようにjsonデータが二つ返ってきています。
現在のレスポンスjsonデータ
{ "id": 3, "item_id": 3, "item": { "id": 3, "code": "205", "name": "商品" }, "item_split_detail": { "id": 9, "item_split_id": 3, "no": 1, "sub_item_id": 1, "split_price": 3000, "created_at": "2022-07-21 10:22:34", "created_user": null, "updated_at": "2022-07-21 10:22:34", "updated_user": null }, "created_at": "2022-07-21T09:28:26.000000Z", "created_user": "created_user", "updated_at": "2022-07-21T10:22:34.000000Z", "updated_user": null }, //*********ここから二つ目のデータ "item_split_detail"以外は一つ目と同じデータを持つ************* { "id": 3, "item_id": 3, "item": { "id": 3, "code": "205", "name": "商品" }, "item_split_detail": { "id": 10, "item_split_id": 3, "no": 2, "sub_item_id": 2, "split_price": 2000, "created_at": "2022-07-21 10:22:34", "created_user": null, "updated_at": "2022-07-21 10:22:34", "updated_user": null }, "created_at": "2022-07-21T09:28:26.000000Z", "created_user": "created_user", "updated_at": "2022-07-21T10:22:34.000000Z", "updated_user": null }
実現したいこと
親となるテーブルのid,item_idは同じでitem_split_detail内のデータが異なっているので、一つのjsonデータにまとめてあげたいです。
実現したいjsonデータ
{ "id": 3, "item_id": 3, "item": { "id": 3, "code": "205", "name": "商品" }, "item_split_detail": { "id": 9, "item_split_id": 3, "no": 1, "sub_item_id": 1, "split_price": 3000, "created_at": "2022-07-21 10:22:34", "created_user": null, "updated_at": "2022-07-21 10:22:34", "updated_user": null }, //*********ここから下に二つ目のデータを入れたい************* { "id": 10, "item_split_id": 3, "no": 2, "sub_item_id": 2, "split_price": 2000, "created_at": "2022-07-21 10:22:34", "created_user": null, "updated_at": "2022-07-21 10:22:34", "updated_user": null }, "created_at": "2022-07-21T09:28:26.000000Z", "created_user": "created_user", "updated_at": "2022-07-21T10:22:34.000000Z", "updated_user": null }
発生している問題・エラーメッセージ
jsonデータを一つにまとめる方法がわからないです。
該当のソースコード
リレーションメソッド
public function item() { return $this->belongsTo(SMItem::class, 'item_id')->withDefault(); } public function splitDetail() { return $this->belongsTo(MItemSplitDetail::class, 'item_id')->withDefault(); }
検索結果取得コード
PHP
1$query = MItemSplit::get(); 2 3 $query = $query->map(function ($getQuery) { 4 $query = [ 5 "id" => $getQuery->id, 6 "item_id" => $getQuery->item_id, 7 "item" => array( 8 "id" => $getQuery->item->id, 9 "code" => $getQuery->item->code, 10 "name" => $getQuery->item->name, 11 ), 12 "item_split_detail" => array( 13 "id" => $getQuery->splitDetail->id, 14 "item_split_id" => $getQuery->splitDetail->item_split_id, 15 "no" => $getQuery->splitDetail->no, 16 "sub_item_id" => $getQuery->splitDetail->sub_item_id, 17 "split_price" => $getQuery->splitDetail->split_price, 18 "created_at" => $getQuery->splitDetail->created_at, 19 "created_user" => $getQuery->splitDetail->created_user, 20 "updated_at" => $getQuery->splitDetail->updated_at, 21 "updated_user" => $getQuery->splitDetail->updated_user, 22 ), 23 "created_at" => $getQuery->created_at, 24 "created_user" => $getQuery->created_user, 25 "updated_at" => $getQuery->updated_at, 26 "updated_user" => $getQuery->updated_user, 27 ]; 28 return $query; 29 }); 30 return $query;
試したこと
mapで加工しようとしましたが、二つデータが出てきてしまっています。
補足情報(FW/ツールのバージョンなど)
Laravel8
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2022/07/22 00:01
2022/07/22 02:48
2022/07/22 05:01
2022/07/22 05:27
2022/07/22 08:02 編集
2022/07/25 01:31
2022/07/25 02:42