cari

Rumah  >  Soal Jawab  >  teks badan

"Perhubungan Laravel One-To-Many memerlukan data untuk berada dalam Model::all() output"

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粉310754094P粉310754094481 hari yang lalu708

membalas semua(1)saya akan balas

  • P粉662802882

    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];
    }

    balas
    0
  • Batalbalas