Sortowanie wydarzeń w zależności od daty

0

Cześć,

Jak w laravelu posortować dane w po kolumnie deadline, a jeśli jest null po kolumnie start_time. Chce wyświetlić wydarzenia w taki sposób aby te które są najbliżej obecnej daty wyświetlały się w pierwszej kolejności ale deadline może nie być ustawiony wtedy sortowanie powinno być po starcie wydarzenia.

Jak mogę to osiągnąć?

0

W SQL to czy Null przy Order by zwracany jest jako pierwszy czy ostatni zależy od silnika bazy. Chyba eloquent nie ma na to odpowiednika dla NULLS FIRST
Zoabcz czy nie zadziała zwykle sortowanie po dwóch kolumnach w ten sposób

Event::raw('ORDER BY `deadline` DESC NULLS FIRST')
    ->orderBy('start_time', 'DESC')
    ->get()

Jak powyższe nie zadziała to może dwa podzapytania i Union?

0

@jurek1980:
Można tak

Event::orderByRaw('deadline DESC NULLS FIRST')
    ->orderBy('start_time', 'DESC')
    ->get()
0
$events = Event::orderBy('deadline', 'asc')->orOrderBy('start_date', 'asc')->get();

W powyższym przykładzie, wydarzenia są sortowane wg daty deadline, a jeśli ta data jest pusta, są sortowane wg daty rozpoczęcia. Oczywiście, jeśli potrzebujesz innych warunków w zapytaniu, możesz dodać je przed wywołaniem metody get(), aby zwrócić wydarzenia spełniające te warunki.

$events = Event::where('active', true)
          ->orderBy('deadline', 'asc')
          ->orOrderBy('start_date', 'asc')
          ->get();
0

@chomikowski:

Call to undefined method Illuminate\Database\Eloquent\Builder::orOrderBy()
1

Jeśli to co napisałem nie działa, napisz proszę najprostszą reprezentację tych tabel jako przykład w jakimś SQLFidlle i zobaczymy. Spróbuj też sam napisać właściwe zapytanie SQL a potem jego reprezentację w ORM.
Bo tak, to ciężko powiedzieć co dokładnie chcesz uzyskać. Powiedzmy, że możesz mieć przypadek że szukasz daty 5 lipca 2023. To w promieniu tej daty na równi będą 4 i 3 lipca. Ale już z mniejszą wagą powinny być wylosowane wydarzenia z 10 i 1 lipca.
Bez dokładnego opisu a najlepiej przykładu ciężko zgadywać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1