2017-10-17 2 views
1

Ich habe eine Reihe von Tagen, die ich gegen die in Laravel Funken endet Studien überprüfen möchten:Laravel Eloquent - wo created_at X Tage vor

$trialIntervals = [10, 5, 3, 1, 0]; 

ich alle Teams holen und dann, wenn überprüfen ihre trial_ends_at Datum die Intervalle mit diffInDays:

$daysTillTrialEnds = Carbon::parse($team->trial_ends_at)->diffInDays(Carbon::now()); 

ich überprüfe dann, wenn dieser Wert bereits ein bestehendes Ergebnis in der Datenbank und in den Pausen ist:

if (in_array($daysTillTrialEnds, $trialIntervals) && !TrialEndingNotification::where('team_id', $team->id)->where('days_notified_at', $daysTillTrialEnds)->count()) { 

    // not yet been added to db 

} 

Ich habe ein Feld mit dem Namen 'days_notified_at', das ich verwende, um zu überprüfen, ob ich die Zeile bereits hinzugefügt und den Kunden benachrichtigt habe. Dieses Feld wird jedoch nie wieder verwendet und ich möchte lieber auf das created_at-Datum verweisen und das Feld entfernen.

Meine Frage ist, wie ich dies im Wesentlichen tun:

->where(Carbon::parse('created_at')->diffInDays(Carbon::now()), $daysTillTrialEnds) 

Ohne diesen Fehler:

ist
DateTime::__construct(): Failed to parse time string (created_at) at position 0 (c): The timezone could not be found in the database 

Ziel, dass die in dem nur die Zeilen angezeigt, die ein created_at Datum, das X Vor Tagen.

+0

arbeiten, weil in der where-Funktion "-> where()" die ersten Argumente der Feldname ist, so Carbon :: als erste Argumente analysieren, wo hat – LorenzoBerti

+1

nicht spüren Laravel hat eine 'whereDate()' -Funktion, die Ihnen in diesem Fall wahrscheinlich sehr helfen wird. –

Antwort

0

Haben Sie etwas versucht, wie:

$dayAgo = 6 // where here there is your calculation for now How many days 
$dayToCheck = Carbon::now()->subDays($dayAgo); 
$model->where("created_at", =, $dayToCheck); 
0

Verwenden WhereRaw

->whereRaw('DATEDIFF(CURDATE(),STR_TO_DATE(created_at, '%Y-%m-%d'))'), $daysTillTrialEnds) 
0
->where(Carbon::parse('created_at')->diffInDays(Carbon::now()), $daysTillTrialEnds) 

zu sollte wie

->where(Carbon::parse($item->created_at)->diffInDays(Carbon::now()), $daysTillTrialEnds) 
0

Laravel automatisch die "created_at" in eine Kurve wird Kohlenstoff-Objekt, so dass Sie nicht haben um es zu analysieren.

`$items->where('created_at')->diffInDays(Carbon::now(), $daysTillTrialEnds)' 

Sollte für Sie vielleicht