Ich versuche, eine Berichtsseite zu erstellen, auf der Berichte von einem bestimmten Datum bis zu einem bestimmten Datum angezeigt werden. Hier ist mein aktueller Code:
$now = date('Y-m-d');
$reservations = Reservation::where('reservation_from', $now)->get();
Was dies in einfachem SQL tut, ist select * from table where reservation_from = $now
.
Ich habe diese Abfrage hier, aber ich weiß nicht, wie ich sie in eine beredte Abfrage konvertieren soll.
SELECT * FROM table WHERE reservation_from BETWEEN '$from' AND '$to
Wie kann ich den obigen Code in eine beredte Abfrage konvertieren? Vielen Dank im Voraus.
reservation_from
. Sie können die darauf basierenden Kohlenstoffwerte verwenden.Reservation::where('reservation_from', '>=', Carbon::createFromDate(1975, 5, 21);) ->where('reservation_from', '<=', Carbon::createFromDate(2015, 5, 21);)->get()
;Antworten:
Die
whereBetween
Methode überprüft, ob der Wert einer Spalte zwischen zwei Werten liegt.In einigen Fällen müssen Sie den Datumsbereich dynamisch hinzufügen. Basierend auf dem Kommentar von @Anovative können Sie dies tun:
Wenn Sie weitere Bedingungen hinzufügen möchten, können Sie diese verwenden
orWhereBetween
. Wenn Sie ein Datumsintervall ausschließen möchten, können Sie verwendenwhereNotBetween
.Andere nützliche where - Klauseln:
whereIn
,whereNotIn
,whereNull
,whereNotNull
,whereDate
,whereMonth
,whereDay
,whereYear
,whereTime
,whereColumn
,whereExists
,whereRaw
.Laravel dokumentiert über Where-Klauseln.
quelle
$from
und$to
dynamische Daten wären, die zum Modell gehören? Wie in gibt es eineffective_at
undexpires_at
Felder und ich möchte abfragen, ob das aktuelle Element innerhalb dieses Bereichs liegt. Ich habe eseach()
mit einem if versucht , dasCarbon::now()->between( ... )
jedoch alle Ergebnisse zurückgibt.filter()
, das hat den Trick gemacht.MyModel::all()->where('column', 'value')->filter(function ($item) { if (Carbon::now->between($item->effective_at, $item->expires_at)) { return $item; } })->first();
Eine weitere Option, wenn Ihr Feld
datetime
anstelle von istdate
( obwohl es in beiden Fällen funktioniert ):quelle
Folgendes sollte funktionieren:
quelle
Wenn Sie überprüfen möchten, ob das aktuelle Datum zwischen zwei Daten in db liegt: => Hier erhält die Abfrage die Bewerbungsliste, wenn die Bewerbung des Mitarbeiters von und bis zum heutigen Datum vorhanden ist.
quelle
Versuche dies:
Da Sie basierend auf einem einzelnen Spaltenwert abrufen, können Sie Ihre Abfrage ebenfalls vereinfachen:
Abrufen basierend auf Bedingung: Laravel-Dokumente
Hoffe das hat geholfen.
quelle
Und ich habe den Modellumfang erstellt
Weitere Informationen zu Bereichen:
https://laravel.com/docs/5.8/eloquent#query-scopes
https://medium.com/@janaksan_/using-scope-with-laravel-7c80dd6a2c3d
Code:
Fügen Sie im Controller die Carbon Library nach oben hinzu
ODER
Um die letzten 10 Tage von jetzt an aufzunehmen
Um die letzten 30 Tage von jetzt an aufzunehmen
quelle
Wenn Sie angeben müssen, wann ein Datum / Uhrzeit-Feld so sein soll.
quelle
Ich weiß, dass dies eine alte Frage sein könnte, aber ich befand mich gerade in einer Situation, in der ich diese Funktion in einer Laravel 5.7-App implementieren musste. Unten ist, was von mir funktioniert hat.
Sie müssen auch Carbon verwenden
quelle