Ich erstelle eine Anwendung, die Informationen über Bäume enthält. Bäume gehören zu vielen Zonen. Um dieses Problem zu lösen, habe ich zwei Datentabellen namens „Trees“ und „TreeZones“ erstellt, die über übereinstimmende Primärschlüssel und Fremdschlüssel verfügen. Ich habe die Operatoren „hasMany“ und „belongsTo“ verwendet, um die Beziehung zwischen den beiden herzustellen. Eigentlich funktioniert alles gut, aber es gibt ein Problem. Die Anwendung verfügt über einen REST-API-Controller. In der Indexfunktion erhalte ich alle Baumdaten. Ich brauche auch Zonen. Ich habe das Problem so gelöst:
/** 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]; }
Die Ausgabeergebnisse lauten wie folgt:
{ "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" } ] }, . . . }
Aber ich möchte, dass das Ergebnis so aussieht:
{ "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" ] }, . . . }
Wie kann dieses Problem mit einer sauberen Lösung gelöst werden?
你可以使用
transform()
方法,并且使用急切加载而不是在foreach循环中使用DB调用。 试试这个