suchen

Heim  >  Fragen und Antworten  >  Hauptteil

„Laravel One-To-Many-Beziehungen erfordern, dass Daten in der Model::all()-Ausgabe enthalten sind“

Ich erstelle eine Anwendung, die Informationen über Bäume enthält. Bäume gehören zu vielen Zonen. Um dieses Problem zu lösen, habe ich zwei Datentabellen namens „Trees“ und „TreeZones“ erstellt, die über übereinstimmende Primärschlüssel und Fremdschlüssel verfügen. Ich habe die Operatoren „hasMany“ und „belongsTo“ verwendet, um die Beziehung zwischen den beiden herzustellen. Eigentlich funktioniert alles gut, aber es gibt ein Problem. Die Anwendung verfügt über einen REST-API-Controller. In der Indexfunktion erhalte ich alle Baumdaten. Ich brauche auch Zonen. Ich habe das Problem so gelöst:

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

Die Ausgabeergebnisse lauten wie folgt:

{
            "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"
                }
            ]
        },
        .
        .
        .
}

Aber ich möchte, dass das Ergebnis so aussieht:

{
            "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"
            ]
        },
        .
        .
        .
}

Wie kann dieses Problem mit einer sauberen Lösung gelöst werden?

P粉310754094P粉310754094526 Tage vor727

Antworte allen(1)Ich werde antworten

  • P粉662802882

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

    你可以使用transform()方法,并且使用急切加载而不是在foreach循环中使用DB调用。 试试这个

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

    Antwort
    0
  • StornierenAntwort