Wie verschiebt man die Funktionsdefinition für die Funktion ->when() in Laravel Eloquent Models?Php

PHP-Programmierer chatten hier
Anonymous
 Wie verschiebt man die Funktionsdefinition für die Funktion ->when() in Laravel Eloquent Models?

Post by Anonymous »

Also baue ich eine Möglichkeit, Elemente basierend auf verschiedenen Anforderungen zu organisieren:

Code: Select all

        $items = Item::query()
->where("type", $itemType)
->when($mode, function (Builder $query, $mode) {
switch ($mode) {
case "TopFavorites":
return $query->orderByDesc('number_favorited');
case "BestSelling":
return $query->orderByDesc('number_sold');
case "RecentlyUpdated":
return $query->orderByDesc('updated_at');
case "ForSale":
return $query->where("onSale", true);
case "Offsale":
return $query->where("onSale", false);
}
})
->get();
Ich frage mich, ob Sie die Funktion in when in eine externe Funktion in der Controller-Klasse verschieben können. Ich habe es versucht, aber es scheint, dass die Variable $query nicht übernommen wird, selbst wenn Sie sie als Argument hinzufügen.

Code: Select all

    private function whenModeQuery(Builder $query, string $mode) {
switch ($mode) {
case "TopFavorites":
return $query->orderByDesc('number_favorited');
case "BestSelling":
return $query->orderByDesc('number_sold');
case "RecentlyUpdated":
return $query->orderByDesc('updated_at');
case "ForSale":
return $query->where("onSale", true);
case "Offsale":
return $query->where("onSale", false);
}
}

Code: Select all

        $items = Item::query()
->where("type", $itemType)
->when($mode, $this->whenModeQuery($query, $mode))
->get();
Der obige Code gibt mir den Fehler „Undefinierte Variable $query“.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post