Ich bin relativ neu in Eloquent und Laravel 5 und verwende den Query Builder, um eine dynamische Abfrage für Kategorien zu erstellen, abhängig davon, welche Variablen an die Funktion übergeben wurden.Laravel 5 Unterabfrage für jede Ergebniszeile
In meiner Kategorietabelle gibt es eine Spalte namens 'parent_id', die angibt, ob die Kategorie eine Unterkategorie ist oder nicht. Hier ist meine Funktion bisher:
public static function filterCategory($vars) {
$query = Category::query();
if((array_key_exists('order_by', $vars)) && (array_key_exists('order', $vars))) {
$query = $query->orderBy($vars['order_by'], $vars['order']);
}
if(array_key_exists('product', $vars)) {
$query = $query->whereHas('products', function($q) use ($vars){
return $q->where('id', $vars['product']);
});
}
if(array_key_exists('sub_cats', $vars)) {
$query = $query->with('subCategories');
}
return $query->get();
}
Ich habe eine Funktion der Kategorie Modell erstellt getChildren genannt, die wie folgt aussieht:
public function subCategories() {
return $this->hasMany('App\Category', 'parent_id', 'id');
}
Was ich zu tun, um der Lage sein soll, wenn meine Kategorie Funktion Wird aufgerufen, um Kategorien zurückzugeben, ich brauche eine Unterabfrage, die für jede Zeile ausgeführt wird, die ein Unterfeld auf dem Ergebnisobjekt erstellt, das alle Kategorien enthält, die die ID der aktuellen Kategorie haben, da es 'Eltern-ID' ist. ich dies will zurückgegeben:
[
{
"id": "1",
"name": "Dr. Ben Becker DDS",
"description": "Et atque illo ut architecto. Blanditiis laboriosam hic sed quia. Aperiam quis totam distinctio.",
"created_at": "1981-04-07 22:04:40",
"updated_at": "2009-02-26 19:53:09",
"parent_id": null,
"subcategories" : {
//results in here
}
},
{
"id": "2",
"name": "Ms. Winona Lehner",
"description": "Repudiandae nostrum repellendus nulla delectus saepe sapiente ipsam. Delectus voluptatem quis excepturi. Tenetur nostrum et cum quia. Fugiat totam sed dicta totam illo ut dolores.",
"created_at": "2002-01-13 13:42:18",
"updated_at": "1981-10-25 11:39:14",
"parent_id": null,
"subcategories" : {
//results in here
}
},
Nun, das einfach genug wäre für mich in Vanille PHP und MYSQL zu tun, aber ich weiß nicht, wie dies mit dem Eloquent Querybuilder in Laravel umgesetzt würde.
** UPDATE Also ich habe die Unterkategorien zurück, aber leider nicht korrekt. Hier ist meine Ausgabe:
[
{
"id": "1",
"name": "Dr. Ben Becker DDS",
"description": "Et atque illo ut architecto. Blanditiis laboriosam hic sed quia. Aperiam quis totam distinctio.",
"created_at": "1981-04-07 22:04:40",
"updated_at": "2009-02-26 19:53:09",
"parent_id": null,
"sub_categories": [
{
"id": "3",
"name": "Dr. Manuel Medhurst",
"description": "Pariatur ut corporis quas sequi dolor totam. Nisi ad amet velit reiciendis voluptates dolore aperiam. Impedit perferendis et a.",
"created_at": "1998-09-20 07:40:23",
"updated_at": "2002-04-01 18:41:24",
"parent_id": "1"
},
{
"id": "4",
"name": "Lee Monahan",
"description": "Nihil qui quod voluptatem non accusamus voluptas. Non et quae velit delectus consequatur vel. Qui totam non rerum sunt nisi soluta sequi. Consequatur eaque quia delectus qui assumenda.",
"created_at": "2014-11-24 06:31:10",
"updated_at": "1996-03-28 18:58:55",
"parent_id": "1"
},
{
"id": "5",
"name": "Miller Osinski",
"description": "Itaque et sed voluptatem earum nulla eligendi tenetur. Et velit ut voluptas similique. Autem rerum sapiente voluptatibus optio esse qui sit et. Alias eligendi aut quibusdam inventore.",
"created_at": "2011-10-08 18:16:56",
"updated_at": "1996-09-29 16:29:37",
"parent_id": "1"
}
]
},
{
"id": "3",
"name": "Dr. Manuel Medhurst",
"description": "Pariatur ut corporis quas sequi dolor totam. Nisi ad amet velit reiciendis voluptates dolore aperiam. Impedit perferendis et a.",
"created_at": "1998-09-20 07:40:23",
"updated_at": "2002-04-01 18:41:24",
"parent_id": "1",
"sub_categories": []
},
{
"id": "4",
"name": "Lee Monahan",
"description": "Nihil qui quod voluptatem non accusamus voluptas. Non et quae velit delectus consequatur vel. Qui totam non rerum sunt nisi soluta sequi. Consequatur eaque quia delectus qui assumenda.",
"created_at": "2014-11-24 06:31:10",
"updated_at": "1996-03-28 18:58:55",
"parent_id": "1",
"sub_categories": []
},
{
"id": "5",
"name": "Miller Osinski",
"description": "Itaque et sed voluptatem earum nulla eligendi tenetur. Et velit ut voluptas similique. Autem rerum sapiente voluptatibus optio esse qui sit et. Alias eligendi aut quibusdam inventore.",
"created_at": "2011-10-08 18:16:56",
"updated_at": "1996-09-29 16:29:37",
"parent_id": "1",
"sub_categories": []
},
{
"id": "2",
"name": "Ms. Winona Lehner",
"description": "Repudiandae nostrum repellendus nulla delectus saepe sapiente ipsam. Delectus voluptatem quis excepturi. Tenetur nostrum et cum quia. Fugiat totam sed dicta totam illo ut dolores.",
"created_at": "2002-01-13 13:42:18",
"updated_at": "1981-10-25 11:39:14",
"parent_id": null,
"sub_categories": []
}
]
Zuerst die richtig aussah, aber in meiner Tabelle Kategorie 1 nur 1 Kind (Kategorie 4) und die Kategorie 2 sollte nur 2 Kinder (Reihen 3 und 5). Es scheint, dass alle diese Unterkategorien falsch in die Unterkategorien von Zeile 1 platziert werden?
Dank
ehrfürchtig. Das hat Spaß gemacht. Das ist die zweite Frage, die Sie mir heute beantwortet haben! – devoncrazylegs
Toll, froh, dass ich helfen konnte :) – TheFallen
Sorry, ich habe gerade festgestellt, dass die Ausgabe falsch ist. Ich werde die Hauptfrage aktualisieren – devoncrazylegs