Wie die Abfrage zwischen zwei Datumsangaben mit Laravel und Eloquent ORM?
Ich versuche einen Bericht zu erstellen, der Seite, die zeigt, dass die Berichte von einem bestimmten Datum an einem bestimmten Datum. Hier ist meine aktuelle code:
$now = date('Y-m-d');
$reservations = Reservation::where('reservation_from', $now)->get();
Was dies bedeutet in einfachen SQL ist select * from table where reservation_from = $now
.
Habe ich diese Abfrage hier, aber ich weiß nicht, wie es zu konvertieren, um eloquent Abfrage.
SELECT * FROM table WHERE reservation_from BETWEEN '$from' AND '$to
Wie kann ich konvertieren Sie den code oben, um eloquent Abfrage? Vielen Dank im Voraus.
- was ist das Datum-format in
reservation_from
. Sie können die Kohlendioxid-Werte auf der Grundlage, dass. - Datum im format TIMESTAMP @AthiKrishnan
- wie es sein würde,
Reservation::where('reservation_from', '>=', Carbon::createFromDate(1975, 5, 21);) ->where('reservation_from', '<=', Carbon::createFromDate(2015, 5, 21);)->get()
;
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die
whereBetween
Methode überprüft, ob der Wert einer Spalte zwischenzwei Werte.
In einigen Fällen müssen Sie Datum-Reihe dynamisch. Basierend auf @Anovative's Kommentar, auf den Sie dies tun können:
Wenn Sie hinzufügen möchten mehr Kondition, dann können Sie
orWhereBetween
. Wenn Sie möchten, um auszuschließen, ein Datum, Intervall, dann können SiewhereNotBetween
.Andere nützliche where-Klauseln:
whereIn
,whereNotIn
,whereNull
,whereNotNull
,whereDate
,whereMonth
,whereDay
,whereYear
,whereTime
,whereColumn
,whereExists
,whereRaw
.Laravel docs über Where-Klauseln.
$from
und$to
würde, werden dynamische Daten, die gehören zu dem Modell? Wie in es ist eineffective_at
undexpires_at
Felder und ich möchte, um die Abfrage zu sehen, ob das aktuelle Element innerhalb dieses Bereichs. Ich habe versuchteach()
mit einer wenn verwendetCarbon::now()->between( ... )
, aber es immer noch gibt alle Ergebnisse zurück.filter()
, das war der trick.MyModel::all()->where('column', 'value')->filter(function ($item) { if (Carbon::now->between($item->effective_at, $item->expires_at)) { return $item; } })->first();
Sollten die folgenden arbeiten:
Weitere option, wenn Ihr Feld ist
datetime
stattdate
(obwohl es funktioniert für beide Fälle):Versuchen Sie dies:
Da sind Sie abrufen, basierend auf einer einzigen Spalte Wert können Sie vereinfachen Sie Ihre Abfrage ebenfalls:
Abrufen, basierend auf Zustand: laravel docs
Hoffe, dass dies geholfen.
Wenn Sie möchten, um zu überprüfen, ob aktuelle Datum existieren zwischen zwei Daten in der db:
=>hier die Abfrage erhalten in der Liste der Anwendungen, wenn die Mitarbeiter die Anwendung von-und bis-Datum ist vorhanden in der heutigen Datum.
Ich weiß, dies ist vielleicht eine alte Frage, aber ich fand mich in einer situation, wo ich musste, um diese Funktion zu implementieren, die in einer Laravel 5.7 app. Unten ist, was war von mir.
Müssen Sie auch aus Carbon
Wenn Sie brauchen, um in, wenn Sie einem datetime-Feld sollte das so sein.
Und ich habe das Modell scope
Mehr über die Bereiche:
https://laravel.com/docs/5.8/eloquent#query-scopes
https://medium.com/@janaksan_/using-scope-with-laravel-7c80dd6a2c3d
Code:
Und in der Steuerung fügen Sie die Carbon-Bibliothek nach oben
ODER
Um die letzten 10 Tage Datensatz von nun
Um die letzten 30 Tagen Datensatz von nun