"Perhubungan Laravel One-To-Many memerlukan data untuk berada dalam Model::all() output"
P粉310754094
P粉310754094 2023-09-14 22:56:53
0
1
625

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粉310754094
P粉310754094

membalas semua(1)
P粉662802882

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];
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!