2016-07-27 7 views
2

Ich arbeite an einer Anwendung, die Laravel und Eloquent verwendet, die bestimmt, ob etwas (ein Job) nicht rechtzeitig abgeschlossen wurde. Dies wird als DATE innerhalb der Tabelle gespeichert. Z.B. 2016-07-18Laravel/Eloquent - Wenn das Datum in der Vergangenheit ist

Ich versuche, alle Datensätze zu erhalten, wo das heutige Datum größer ist als das in der Tabelle gespeicherte "completed_date". Hier

ist, was ich versucht habe:

$id = \Auth::user()->id; 
$now = \Carbon\Carbon::today(); 

$jobs = Job::whereHas('manager', function ($user) use ($id) { 
    $user->where('users.id', '=', $id); 
})->where('complete_date', '>', $now)->get(); 

Das Problem ist, dass es immer noch Aufzeichnungen abgerufen, die in der Zukunft liegen. Zum Beispiel, der Datensatz, den es zurückgibt, überprüfte ich die Tabelle und das "complete_date" ist 2016-08-31

Irgendwelche Ideen bitte?

+1

Sie sollten tun '-> wo ('complete_date', '<', $now)-> get();' nicht '>' – Maraboc

+0

@Maraboc Doing bringt nicht viel mehr Zeilen.Ich möchte überprüfen, ob das 'complete_date' ist über heute, daher ist es überfällig – Phorce

+0

Ich habe Ihre Bedürfnisse nicht genau verstanden: p – Maraboc

Antwort

-1

Ihre $ jetzt Variable ist ein Carbon-Objekt, kein Datum.

Sie haben das Objekt zu einem Datum konvertieren:

$now = \Carbon\Carbon::now()->format('Y-m-d'); 

Dann müssen Sie diese Variable in Ihrer Modell-Abfrage verwenden.

+0

Auto bon wird automatisch in Daten konvertiert, wenn es in Abfragen verwendet wird. Es muss nicht manuell formatiert werden. – ceejayoz

+0

@ceejayoz, Kohlenstoff wird automatisch in 'Y-m-dH umgewandelt: i: s' nicht 'Y-m-d'. Da der Datenbanktyp "DATE" keinen Zeitanteil hat, kann das Standard-Carbon-Format für den Vergleich als nicht gültig betrachtet werden, oder? – Phargelm

+0

@Phargelm Ich hatte keine Probleme, ein Carbon Date direkt an ein 'DATE' Feld zu übergeben. Laravel scheint es intern gut zu handhaben (oder der SQL-Server behandelt es vielleicht automatisch). – ceejayoz

Verwandte Themen