Rumah > Soal Jawab > teks badan
Saya sedang membina aplikasi yang mengandungi maklumat tentang pokok. Pokok tergolong dalam banyak zon. Jadi untuk menyelesaikan masalah ini, saya mencipta dua jadual data yang dipanggil Trees dan TreeZones, yang mempunyai padanan kunci utama dan kunci asing. Saya menggunakan pengendali "hasMany" dan "belongsTo" untuk mewujudkan hubungan antara keduanya. Semuanya sebenarnya berfungsi dengan baik, tetapi ada masalah. Aplikasi ini mempunyai pengawal API REST. Dalam fungsi indeks saya mendapat semua data pokok. Saya juga memerlukan zon. Saya menyelesaikan masalah seperti ini:
/** 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]; }
Hasil keluaran adalah seperti berikut:
{ "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" } ] }, . . . }
Tetapi saya mahu hasilnya kelihatan seperti ini:
{ "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" ] }, . . . }
Bagaimana untuk menyelesaikan masalah ini dengan penyelesaian yang kemas?
P粉6628028822023-09-15 15:51:42
Anda boleh menggunakan kaedah transform()
dan menggunakan Memuat bersemangat dan bukannya menggunakan panggilan DB dalam gelung foreach.
Cuba ini
public function index() { $trees = Tree::with(['zones'])->get(); $trees->transform(function($tree, $key) { foreach ($tree->zones as $zoneKey => $zone) { $trees["zones"][$zoneKey] = $zone->name //如果你有name列 } return $trees; }) return ['data'=>$trees]; }