Как упростить сбор с помощью Laravel? - PullRequest
0 голосов
/ 15 сентября 2018

У меня есть коллекция, в которой я возвращаю надписи.Каждая надпись имеет свой статус (Премиум, Нет подписок, Приписан).

Чтобы получить надписи по каждому состоянию, я фильтрую основную коллекцию, а затем одну, используя слияние.

Мой кодa следует:

    $inscriptions = Inscription::get();

    $premium = $inscriptions->where('state', '=', 'Premium')->sortByDesc('created_at');

    $no_suscription = $inscriptions->where('state', '=', 'No suscription')->sortByDesc('created_at');

    $subscribed = $inscriptions->where('state', '=', 'Subscribe')->sortByDesc('created_at');

    return $premium->merge($no_suscription->merge($subscribed));

Можно ли упростить код, выполнив весь процесс непосредственно в коллекции $inscriptions, чтобы вам не приходилось разбивать его и затем присоединять к нему?

PS: Я не могу использовать базу данных для группировки по штатам, она должна быть в коллекции.

Спасибо

Ответы [ 2 ]

0 голосов
/ 15 сентября 2018

используйте этот запрос:

Inscription::orderBy(DB::raw(
'CASE
    WHEN state = Premium THEN 1
    WHEN state = "No suscription" THEN 2
    ELSE 3
END'
))->sortByDesc('created_at')
0 голосов
/ 15 сентября 2018

Используйте метод сбора groupBy :

$inscriptions = Inscription::get()->groupBy('state');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...