"Les relations Laravel One-To-Many nécessitent que les données soient dans la sortie Model::all()"
P粉310754094
P粉310754094 2023-09-14 22:56:53
0
1
661

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 ?

P粉310754094
P粉310754094

répondre à tous(1)
P粉662802882

Vous pouvez utiliser la méthode transform() et utiliser Eager Loading au lieu d'utiliser des appels DB dans une boucle foreach. Essayez ceci

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];
}
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!