Laravel orderBy со значением столбца

Вот код, который у меня сейчас есть:

$programmefundings = Programmefunding::where('status', '!=', 'draft')->orderByRaw("FIELD(status , 'open', 'announced', 'delayed', 'closed') ASC")->orderBy('date_start', 'desc')->get();

Таким образом, он получает все мои программные средства, кроме тех, которые имеют статус ‘проект’, переупорядочивает их из ‘открыть’ в ‘закрыто’ и организует их ‘DATE_START’.

Мне нужно переупорядочить фонды программы, которые имеют статус «объявлен» в другой колонке ‘Announcement_date’ в «По возрастанию» порядок, не нарушая ‘открыть’ в ‘закрыто’ структура, которая у него есть в настоящее время и не влияет на другие программные определения, которые не имеют значения состояния «Объявил».

Возможно ли это и кто-нибудь знает, как это сделать?

Спасибо!

1

Решение

Вы должны быть в состоянии сделать это с IF заявление.

$programmefundings = Programmefunding::where('status', '!=', 'draft')
->orderByRaw("FIELD(status , 'open', 'announced', 'delayed', 'closed') ASC")
->orderByRaw("IF(status = 'announced', accouncement_date, date_start) DESC")
->get();
1

Другие решения

Я думаю, что вы хотите сделать что-то вроде этого. Он упорядочит все элементы со статусом объявленного сначала по дате объявления, затем отсортирует все остальное по дате_запуска.

$programmefundings = Programmefunding::where('status', '!=', 'draft')
->orderByRaw("case when status = 'announced' then announcement_date end asc")
->orderBy('date_start', 'desc')->get();
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector