web-dev-qa-db-de.com

Wie kann man mit Laravel und Eloquent zwischen zwei Daten abfragen?

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 umwandeln soll.

SELECT * FROM table WHERE reservation_from BETWEEN '$from' AND '$to

Wie kann ich den obigen Code in eine beredte Abfrage konvertieren? Danke im Voraus.

70
wobsoriano

Die whereBetween -Methode überprüft, ob der Wert einer Spalte zwischen zwei Werten liegt.

$from = date('2018-01-01');
$to = date('2018-05-02');

Reservation::whereBetween('reservation_from', [$from, $to])->get();

In einigen Fällen müssen Sie den Datumsbereich dynamisch hinzufügen. Basierend auf dem Kommentar von @ Anovative können Sie dies tun:

Reservation::all()->filter(function($item) {
  if (Carbon::now->between($item->from, $item->to) {
    return $item;
  }
});

Wenn Sie weitere Bedingungen hinzufügen möchten, können Sie orWhereBetween verwenden. Wenn Sie ein Datumsintervall ausschließen möchten, können Sie whereNotBetween verwenden.

Reservation::whereBetween('reservation_from', [$from1, $to1])
  ->orWhereBetween('reservation_to', [$from2, $to2])
  ->whereNotBetween('reservation_to', [$from3, $to3])
  ->get();

Andere nützliche where-Klauseln: whereIn, whereNotIn, whereNull, whereNotNull, whereDate, whereMonth, whereDay, whereYear, whereTime, whereColumn, whereExists, whereRaw.

Laravel-Dokumentation zu Where-Klauseln.

148
Peter Kota

Folgendes sollte funktionieren:

$now = date('Y-m-d');
$reservations = Reservation::where('reservation_from', '>=', $now)
                           ->where('reservation_from', '<=', $to)
                           ->get();
9
Pᴇʜ

Eine weitere Option, wenn Ihr Feld datetime anstelle von date ist (obwohl dies in beiden Fällen funktioniert):

$fromDate = "2016-10-01";
$toDate   = "2016-10-31";

$reservations = Reservation::whereRaw("reservation_from >= ? AND reservation_from <= ?", 
    array($fromDate." 00:00:00", $toDate." 23:59:59")
)->get();
8
tomloprod

Versuche dies:

Da Sie basierend auf einem einzelnen Spaltenwert abrufen, können Sie Ihre Abfrage ebenfalls vereinfachen:

$reservations = Reservation::whereBetween('reservation_from', array($from, $to))->get();

Abrufen basierend auf Bedingung: Laravel Docs

Hoffe das hat geholfen.

7
ArtisanBay

Wenn Sie überprüfen möchten, ob das aktuelle Datum zwischen zwei Datumsangaben in db: => hier liegt, erhält die Abfrage die Antragsliste, wenn der Antrag des Mitarbeiters vom und bis zum heutigen Datum vorhanden ist.

$list=  (new LeaveApplication())
            ->whereDate('from','<=', $today)
            ->whereDate('to','>=', $today)
            ->get();
6
John

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. Nachfolgend ist aufgeführt, was bei mir funktioniert hat.

 $articles = Articles::where("created_at",">", Carbon::now()->subMonths(3))->get();

Sie müssen auch Carbon verwenden

use Carbon\Carbon;
2

Wenn Sie wissen möchten, wann ein Datums-/Uhrzeitfeld so aussehen soll.

return $this->getModel()->whereBetween('created_at', [$dateStart." 00:00:00",$dateEnd." 23:59:59"])->get();
1
MIGUEL LOPEZ

Und ich habe den Modellumfang erstellt

Weitere Informationen zu Bereichen:

Code:

   /**
     * Scope a query to only include the last n days records
     *
     * @param  \Illuminate\Database\Eloquent\Builder $query
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public function scopeWhereDateBetween($query,$fieldName,$fromDate,$todate)
    {
        return $query->whereDate($fieldName,'>=',$fromDate)->whereDate($fieldName,'<=',$todate);
    }

Fügen Sie im Controller die Carbon Library nach oben hinzu

use Carbon\Carbon;

[~ # ~] oder [~ # ~]

use Illuminate\Support\Carbon;

Um den Datensatz der letzten 10 Tage abzurufen

 $lastTenDaysRecord = ModelName::whereDateBetween('created_at',(new Carbon)->subDays(10)->toDateString(),(new Carbon)->now()->toDateString() )->get();

Um den Datensatz der letzten 30 Tage abzurufen

 $lastTenDaysRecord = ModelName::whereDateBetween('created_at',(new Carbon)->subDays(30)->toDateString(),(new Carbon)->now()->toDateString() )->get();
1
Manojkiran.A