Anzahl der heutigen Termine in Laravel

Werner S

Mitglied
Grüß euch,

ich stehe mal wieder vor einem Problem.
In der Spalte start steht 2020-08-26 08:30:00

Jetzt möchte ich gerne die Anzahl der Termine die heute sind ausgeben lassen, stattdessen zeigt er mir aber gar nichts.

Wo liegt das Problem?

Laravel Count:
$count = Event::where('private', 0)->where('active', 1)->where('start', '=', date('Y-m-d'))->orWhere('user_id', Auth::user()->id)->where('private', '1')->where('active', 1)->where('start', '=', date('Y-m-d'))->count();

Der Fehler müsste bei 'start', '=', date('Y-m-d') liegen, finde aber wohl den Wald vor lauter Bäumen nicht.

LG
 
Welche Datenbank hast du im Einsatz und welchen Datentyp hat die Spalte in der Datenbank?
 
Welche Datenbank hast du im Einsatz und welchen Datentyp hat die Spalte in der Datenbank?

MySQL und datetime
Im inputfeld habe ich datetime-local

Bin schon am überlegen ob ich nicht einfach eine weitere Spalte "day" hinzufüge, aus dem Inputfeld einfach das Jahr, Monat und Tag raus kopiere und in das weitere Feld eintragen.
So könnte ich es mit dem SQL oben einfach nur auslesen

PHP:
$eventcount = Event::where('private', 0)->where('active', 1)->where('day', '=', date('Y-m-d'))->orWhere('user_id', Auth::user()->id)->where('private', '1')->where('active', 1)->where('day', '=', date('Y-m-d'))->count();

Ob sich dafür aber eine weitere SQL Spalte lohnt, das ist die Frage
 
Das ist ein Datetime-Feld und du vergleichst Date mit Datetime.. Du könntest die Daten bei der Abfrage umformen (vielleicht auch schon im Modell).

Oder versucht mit einem Zeitraum:
->where('start', '>=', date('Y-m-d'))->where('start', '<=' date('Y-m-d', strtotime('tomorrow')))
 
Bin schon am überlegen ob ich nicht einfach eine weitere Spalte "day" hinzufüge, aus dem Inputfeld einfach das Jahr, Monat und Tag raus kopiere und in das weitere Feld eintragen.
So könnte ich es mit dem SQL oben einfach nur auslesen

PHP:
$eventcount = Event::where('private', 0)->where('active', 1)->where('day', '=', date('Y-m-d'))->orWhere('user_id', Auth::user()->id)->where('private', '1')->where('active', 1)->where('day', '=', date('Y-m-d'))->count();

Ob sich dafür aber eine weitere SQL Spalte lohnt, das ist die Frage

Nicht wirklich, so sorgst du nur für Redundanzen in deiner DB.

Es gibt im Query Builder von Laravel eine Methode namens whereDate(). Damit kannst du ganz einfach in einer bestimmten Spalte nach einem Eintrag mit dem entsprechenden Datum suchen.

PHP:
$count = Event::where('private', 0)->where('active', 1)->whereDate('start', now()->toDateString())->orWhere('user_id', Auth::user()->id)->where('private', '1')->where('active', 1)->whereDate('start', now()->toDateString())->count();

Dies sollte unabhängig davon funktionieren, ob in der Datenbank ein DATETIME- oder schlicht ein DATE-String liegt.

Doku (recht weit unten): https://laravel.com/docs/8.x/queries#where-clauses

PS: Ich nutze in meiner Lösung die Laravel-Helper-Funktion now(), welche ein Carbon-Objekt für den aktuellen Zeitpunkt zurückgibt.


Eine weitere Möglichkeit wäre, einen ähnlichen Ansatz wie deine Idee mit der zusätzlichen "day"-Spalte zu wählen, dies aber dynamisch mittels Laravel im Eloquent Model umzusetzen.
Die Eloquent Accessor hatte ich dir ja schon im letzten Thread von dir vorgestellt.
Das sollte jetzt eigentlich auch anwendbar sein, denke ich.
 
Zurück
Oben Unten