Laravel 6.0 Eloquent - сортировка по дате и статусу - PullRequest
0 голосов
/ 02 мая 2020

Попытка упорядочить таблицу сначала по самой новой дате, а затем по статусу. Состояние может быть (Новое, В проверке, Отклонено, Закрыто), а Статус - это поле enum в базе данных.

Я пробовал несколько вещей, но безуспешно. Это самое близкое, что у меня есть с этим кодом. Я новичок в Laravel, поэтому не уверен, как это сделать.

$inquiries = Inquiry::all()->sortByDesc('created_at')->sortByDesc('Status')->values();

Это приводит к следующему:

--------------------------------------------------------------
|     Name          |      Created At    |      Status       |
--------------------------------------------------------------
|     Richard       |      05/02/2020    |       New         |
--------------------------------------------------------------
|     James         |      05/02/2020    |       New         |
--------------------------------------------------------------
|     Christine     |      04/16/2020    |      Declined     |
--------------------------------------------------------------
|     Charles       |      04/14/2020    |       New         |
--------------------------------------------------------------
|     Judy          |      03/13/2020    |      In Review    |
--------------------------------------------------------------
|     Paul          |      01/12/2020    |       New         |
--------------------------------------------------------------

Я бы хотел, чтобы это выглядело так, как это отсортировано по Дата, сначала с самой новой датой, затем со статусом = "Новый". Я бы хотел, чтобы это выглядело так:

--------------------------------------------------------------
|     Name          |      Created At    |      Status       |
--------------------------------------------------------------
|     Richard       |      05/02/2020    |       New         |
--------------------------------------------------------------
|     James         |      05/02/2020    |       New         |
--------------------------------------------------------------
|     Charles       |      04/14/2020    |       New         |
--------------------------------------------------------------
|     Paul          |      01/12/2020    |       New         |
--------------------------------------------------------------
|     Christine     |      04/16/2020    |      Declined     |
--------------------------------------------------------------
|     Judy          |      03/13/2020    |      In Review    |
--------------------------------------------------------------

Ответы [ 2 ]

0 голосов
/ 02 мая 2020

Сначала посмотрим, нужно ли вам использовать orderBy() или sortByDesc().

sortBy () / sortByDes c ()

Методы sortBy() и sortByDesc() используются для сортировки данных после извлечения результатов из базы данных.

orderBy ()

Метод orderBy совпадает с оператором SQL ORDER BY. Это отсортирует записи базы данных, а затем выведет результаты.


Ответ

Здесь вам нужно использовать orderBy() вместо sortByDesc(). Это почти повторяющийся вопрос, найдите оригинал здесь.

// Make sure column names are correct
$inquiries = Inquiry::orderBy('status', 'ASC')
    ->orderBy('created_at', 'DESC')
    ->get();

0 голосов
/ 02 мая 2020

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

Inquiry::all()->sortBy(function ($inquiry) {
    return sprintf('%s%s', $inquiry->created_at, $inquiry->status);      
})->values();

Подробнее об этом можно прочитать здесь: https://laravel.com/docs/collections#method -sortby

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...