recherche

Maison  >  Questions et réponses  >  le corps du texte

"Les relations Laravel One-To-Many nécessitent que les données soient dans la sortie Model::all()"

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粉310754094P粉310754094495 Il y a quelques jours714

répondre à tous(1)je répondrai

  • P粉662802882

    P粉6628028822023-09-15 15:51:42

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

    répondre
    0
  • Annulerrépondre