Jak pobrać rekord o danej dacie(datetime)[Laravel]

0

W bazie danych mam rekordy przechowujące prognozy pogody. Chciałbym sprawdzić, czy istnieje rekord prognozujący pogodę na dokładnie dany dzień i godzinę. W bazie danych przechowuję go jako datetime. Próbowałem różnych rzeczy, ale odnoszę wrażenie, że zawsze zwraca false, mimo że taki rekord powinien istnieć. Czy poniższe zapisy rzeczywiście nie mogą zadziałać zgodnie z oczekiwaniem(w logach raczej nic nie ma wydaje mi się, że zapisy są poprawne składniowo). Czy może któraś z linii jest wystarczająca, a problem leży gdzie indziej?

 Forecast::where(DB::raw("Date(date) = '".$date."'"))->exists();//to dla date? Przerobione na podstawie znalezionego w necie fragmentu
 Forecast::where('date', $date)->exists();
 Forecast::whereDate('date', '=',  $date)->exists();//to chyba raczej jest do date niż datetime?

EDIT: Rozwiązaniem wydaje się być trzymanie daty jako tekstu, ale zostawiam, bo pewnie jakoś da się to zrobić nie naokoło.

4

Trzymasz datetime, więc musisz porównywać dokładną godzinę lub szukać z przedziału.

Nie wiem co masz w $date, nie wiem jakie wartości masz w bazie, ale przyjmując, że np w bazie trzymasz 2019-07-01 1036 To musszi przesłać mu dokładnie taką date z czasem, sama data być nie może czyli

 Forecast::where('date', '2019-07-01 10:15:36' )->exists();

lub

$date = Carbon::parse( '2019-07-01 10:15:36');
 Forecast::where('date', $date )->exists();

lub

$start_day = Carbon::parse( '2019-07-01 10:15:36')->startOfDay();
$end_day = $start_day->copy()->endOfDay();
 Forecast::where('date', '>=' $start_day )->andWhere('date', '<=' $end_day )->exists();

Edit doczytałem, że mówisz o godzinie czyli wtedy by było tak

$start_hour = Carbon::parse( '2019-07-01 10:15:36')->startOfHour();
$end_hour = $start_hour ->copy()->endOfHour();
 Forecast::where('date', '>=' $start_hour )->andWhere('date', '<=' $end_hour )->exists();

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