„Laravel One-To-Many-Beziehungen erfordern, dass Daten in der Model::all()-Ausgabe enthalten sind'
P粉310754094
P粉310754094 2023-09-14 22:56:53
0
1
662

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

Antworte allen(1)
P粉662802882

你可以使用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];
}
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!