Упорядочить по значению столбца - PullRequest
2 голосов
/ 25 февраля 2020

У меня есть функция поиска, которая возвращает фильмы и упорядочивает их по отметке времени, у меня есть фильтр с именем status со строковыми значениями в виде констант online и offline. Я хочу, чтобы этот фильтр отображал профили с обоими результатами но все онлайн сначала и офлайн внизу

Можете ли вы упорядочить по значению строки столбца, чтобы он возвращал только фильмы, которые онлайн вверху и оффлайн внизу? что-то вроде ниже

->orderBy('status', 'online', desc)

Запрос

Ниже приведен мой текущий запрос, для которого по временной метке было бы достаточно добавить еще один ордерBy для решения ?

 Film::select('films.*')
        ->when($filters->input('status'), function ($query, $status) {
               $query->where('status', $status);
            }
        })
        ->orderBy('films.updated_at', 'desc')
        ->distinct()
        ->get();

Ответы [ 2 ]

0 голосов
/ 25 февраля 2020

Вы можете использовать условный порядок следующим образом:

Film::select('films.*')
    ->when($filters->input('status'), function ($query, $status) {
            $query->where('status', $status);
    })
    ->orderBy(\DB::raw("
        CASE WHEN status = 'online' THEN 1 ELSE 0 END DESC
    "))
    ->distinct()
    ->get();

В приведенном выше запросе, если статус онлайн, он будет сверху, а если статус другой, то будет ниже. Надеюсь, это поможет вам

0 голосов
/ 25 февраля 2020

Вы можете вызывать orderBy () столько раз, сколько вам нужно.

 Film::select('films.*')
            ->when($filters->input('status'), function ($query, $status) {
                if ($status !== FilmStatus::OFFLINE) {
                    $query->where('status', $status);
                }
            })
            ->orderBy('films.updated_at', 'desc')
            ->orderBy('status', 'ASC')
        ->distinct()
        ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...