2016-04-12 5 views
2

Ich habe die folgende Abfrage mit dem Laravel Query Builder geschrieben. Ich versuche, die Anzahl der Felder in einer Spalte für eine Benutzer-ID, eine Aktivitäts-ID und ein Datum zu erhalten. Es ist die Datumsfeldeingabe, die das Problem verursacht. Ich möchte in der Lage sein, alle Felder zurückzugeben, die das gleiche Datum wie das Datum haben, das ich übergebe. Unten ist mein Code.Laravel Abfrage mit yyyy-mm - dd Wert auf Datetime-Spalte

$points = DB:: table("users_has_activities") 
-> where("activitiesID", "=", $this->activityID) 
-> where("usersID", "=", $userID) 
-> where("time", "=", $date) 
-> count(); 

$ date wird ein Wert wie „2016.04.10“ sein, und das Feld in meiner Tabelle werden Werte wie ‚2016.04.10 21.01.27‘. Ich muss in der Lage sein, alle Felder zu erhalten, in denen der Tag des Datumswerts mit dem Tag des Datetime-Werts in der Tabelle übereinstimmt.

+0

Was ist die MySQL Art der 'Time' Spalte? –

+0

der Typ Date – ray

Antwort

1

können Sie die whereDay() Methode verwenden, um die DATE von DATETIME Art zu erhalten:

$points = DB:: table("users_has_activities") 
-> where("activitiesID", "=", $this->activityID) 
-> where("usersID", "=", $userID) 
-> whereDay("time", "=", $date) 
-> count(); 
+0

Dank ist es eine Möglichkeit, es funktioniert, wenn $ date eine Zeichenkette, die ich versucht habe mit strtotime aber das ist nicht – ray

+0

Check @ Matthew Antwort funktioniert [hier] (http://stackoverflow.com/questions/6238992/Umwandlung-string-to-date-and-datetime/6239199 # 6239199) – Sevle

+0

ich es wie dieses Vergehen in $ newDate statt Datum gelöst. $ originalDate = $ Datum; $ newDate = Datum ("d-m-Y", strtotime ($ originalDate)); – ray

0

Der beste Weg, dies zu handhaben ist ein whereBetween wie es in der Lage sein werden Datenbankindizes zu verwenden und muss nicht ein Berechnung für jede Reihe in der DB:

$points = DB:: table("users_has_activities") 
-> where("activitiesID", "=", $this->activityID) 
-> where("usersID", "=", $userID) 
-> whereBetween("time", '2016-04-12 00:00:00', '2016-04-12 23:59:59') 
-> count(); 

Laravel's gebündeltes Carbon kann praktisch sein, um diese Daten zu generieren. Wenn Ihre Spalte als Datum markiert ist (siehe https://laravel.com/docs/5.2/eloquent-mutators#date-mutators) sie werden bereits Kohlenstoff Objekte sein:

$start = $date->copy()->startOfDay(); 
$end = $date->copy()->endOfDay();