Je construis une application qui contient des informations sur les arbres. Les arbres appartiennent à plusieurs zones. Donc, pour résoudre ce problème, j'ai créé deux tables de données appelées Trees et TreeZones, qui ont des clés primaires et des clés étrangères correspondantes. J'ai utilisé les opérateurs "hasMany" et "belongsTo" pour établir la relation entre les deux. En fait, tout fonctionne bien, mais il y a un problème. L'application dispose d'un contrôleur API REST. Dans la fonction d'index, j'obtiens toutes les données de l'arborescence. J'ai aussi besoin de zones. J'ai résolu le problème comme ceci :
/** public function index() { $trees = Tree::all(); foreach($trees as $key => $tree){ $treeData = Tree::find($tree->id); foreach($treeData->zones as $zone) { $trees[$key]['zones'][] = $zone->zone; } } return ['data'=>$trees]; }
Les résultats de sortie sont les suivants :
{ "id": 1, "name": "Kavak Ağacı", "min": "-45.6", "max": "-42.8", "url": "https://p4.wallpaperbetter.com/wallpaper/255/713/198/poplar-trees-near-lake-wallpaper-preview.jpg", "zones": [ { "zone": "2a" }, { "zone": "4b" } ] }, . . . }
Mais je veux que le résultat ressemble à ceci :
{ "id": 1, "name": "Kavak Ağacı", "min": "-45.6", "max": "-42.8", "url": "https://p4.wallpaperbetter.com/wallpaper/255/713/198/poplar-trees-near-lake-wallpaper-preview.jpg", "zones": [ "2a", "4b", "5c" ] }, . . . }
Comment résoudre ce problème avec une solution soignée ?
Vous pouvez utiliser la méthode
transform()
et utiliser Eager Loading au lieu d'utiliser des appels DB dans une boucle foreach. Essayez ceci