Как выбрать отдельные записи, упорядоченные по столбцу даты desc - Laravel - PullRequest
0 голосов
/ 14 октября 2019

У меня есть такая таблица:

app_id | releaseDate 
111  | 2019-04-21
111  | 2019-05-10
222  | 2019-07-21
222  | 2019-04-22
222  | 2019-05-25
333  | 2019-06-21
333  | 2019-05-21

Мне нужно получить такой результат (нужно заказать desc по releaseDate и после выбора отличительного):

111 | 2019-05-10
222 | 2019-07-21
333 | 2019-06-21

Мой код:

$apps_histories = ApplicationHistory::with('application')->whereBetween('releaseDate', ['2014-10-01', '2019-10-14'])
            ->orderBy('releaseDate', 'DESC')
            ->groupBy('app_id')
            ->get();

Я получил:

111 | 2019-04-21
222 | 2019-04-22
333 | 2019-05-21

Я пробовал разные подходы, но я не понимаю, почему это не работает, как я ожидаю. Не могли бы вы помочь?

1 Ответ

1 голос
/ 14 октября 2019

Вы можете достичь этого поведения двумя способами. Первый - отфильтровать releaseDate в запросе, используя необработанный запрос:

$apps_histories = ApplicationHistory::with('application')
        ->whereBetween('releaseDate', ['2014-10-01', '2019-10-14'])
        ->select(\DB::raw('*, max(releaseDate) as releaseDate'))
        ->orderBy('releaseDate', 'DESC')
        ->groupBy('app_id')
        ->get();

Другой способ - использовать unique функцию в результате Collection. Просто учтите, что эта опция не оптимизирована для больших таблиц результатов:

$apps_histories = ApplicationHistory::with('application')
        ->whereBetween('releaseDate', ['2014-10-01', '2019-10-14'])
        ->orderBy('releaseDate', 'DESC')
        ->get()
        ->unique('app_id');
...