Как переместить определение функции ->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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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