Как переместить определение функции ->when() в моделях Laravel Eloquent?Php

Кемеровские программисты php общаются здесь
Anonymous
Как переместить определение функции ->when() в моделях Laravel Eloquent?

Сообщение Anonymous »

Я создаю способ организации элементов на основе различных запросов:

Код: Выделить всё

$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();
Мне интересно, можете ли вы переместить функцию if во внешнюю функцию в классе контроллера. Я пытался это сделать, однако, похоже, переменная $query не переносится, даже если вы добавите ее в качестве аргумента.

Код: Выделить всё

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

Код: Выделить всё

$items = Item::query()
->where("type", $itemType)
->when($mode, $this->whenModeQuery($query, $mode))
->get();
Приведенный выше код выдает ошибку неопределенной переменной $query.


Подробнее здесь: https://stackoverflow.com/questions/798 ... aravel-elo

Вернуться в «Php»