Próbuję utworzyć stronę raportu, która pokazuje raporty od określonej daty do określonej daty. Oto mój obecny kod:
$now = date('Y-m-d');
$reservations = Reservation::where('reservation_from', $now)->get();
To, co to robi w zwykłym SQL, to select * from table where reservation_from = $now
.
Mam tutaj to zapytanie, ale nie wiem, jak zamienić je na zapytanie elokwentne.
SELECT * FROM table WHERE reservation_from BETWEEN '$from' AND '$to
Jak mogę przekonwertować powyższy kod na elokwentne zapytanie? Z góry dziękuję.
reservation_from
. możesz na tej podstawie użyć wartości węgla.Reservation::where('reservation_from', '>=', Carbon::createFromDate(1975, 5, 21);) ->where('reservation_from', '<=', Carbon::createFromDate(2015, 5, 21);)->get()
,;Odpowiedzi:
Te
whereBetween
metody sprawdza, czy wartość kolumną jest pomiędzy dwiema wartościami.W niektórych przypadkach musisz dynamicznie dodawać zakres dat. Na podstawie komentarza @Anovative możesz to zrobić:
Jeśli chcesz dodać więcej warunku, możesz użyć
orWhereBetween
. Jeśli chcesz wykluczyć przedział dat, możesz użyćwhereNotBetween
.Pozostałe klauzule użyteczne gdzie:
whereIn
,whereNotIn
,whereNull
,whereNotNull
,whereDate
,whereMonth
,whereDay
,whereYear
,whereTime
,whereColumn
,whereExists
,whereRaw
.Laravel dokumentuje o Where Clauses.
źródło
$from
i$to
byłyby? Jak w istniejeeffective_at
iexpires_at
pola i chcę do zapytania, czy bieżący element jest w tym przedziale. Próbowałemeach()
z if that usesCarbon::now()->between( ... )
, jednak nadal zwraca wszystkie wyniki.filter()
, to załatwiło sprawę.MyModel::all()->where('column', 'value')->filter(function ($item) { if (Carbon::now->between($item->effective_at, $item->expires_at)) { return $item; } })->first();
Inna opcja, jeśli twoje pole jest
datetime
zamiastdate
( chociaż działa w obu przypadkach ):źródło
Powinno działać:
źródło
Jeśli chcesz sprawdzić, czy aktualna data istnieje między dwiema datami w db: => tutaj zapytanie spowoduje wyświetlenie listy aplikacji, jeśli aplikacja pracownika od i do tej daty istnieje w dzisiejszej dacie.
źródło
Spróbuj tego:
Ponieważ pobierasz na podstawie wartości pojedynczej kolumny, możesz również uprościć zapytanie:
Pobieranie na podstawie warunku: laravel docs
Mam nadzieję, że to pomogło.
źródło
I stworzyłem zakres modelu
Więcej o zakresach:
https://laravel.com/docs/5.8/eloquent#query-scopes
https://medium.com/@janaksan_/using-scope-with-laravel-7c80dd6a2c3d
Kod:
W kontrolerze dodaj bibliotekę węgla do góry
LUB
Aby uzyskać rekord z ostatnich 10 dni od teraz
Aby uzyskać rekord z ostatnich 30 dni od teraz
źródło
Jeśli potrzebujesz określić, kiedy pole daty i godziny powinno być takie.
źródło
Wiem, że to może być stare pytanie, ale właśnie znalazłem się w sytuacji, w której musiałem zaimplementować tę funkcję w aplikacji Laravel 5.7. Poniżej jest to, co zadziałało ode mnie.
Będziesz także musiał użyć węgla
źródło