2017-10-17 2 views
1

J'ai un tableau de jours que je veux vérifier contre les essais se terminent par Laravel Spark:Laravel Eloquent - où created_at est il y a X jours

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

je vais chercher toutes les équipes et vérifier si leur une date trial_ends_at des intervalles en utilisant diffInDays:

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

Je puis vérifier si cette valeur est déjà un résultat existant dans la base de données et dans les intervalles:

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

    // not yet been added to db 

} 

J'ai un champ appelé 'days_notified_at' que j'utilise le contrôle si j'ai déjà ajouté la ligne et notifié le client. Cependant, ce champ n'est jamais utilisé à nouveau et je préfère référencer la date created_at et supprimer le champ.

Ma question est de savoir comment je fais essentiellement ceci:

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

Sans obtenir cette erreur:

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

Le but est que le ou ne montrera que les lignes qui ont une date created_at qui est X il y a quelques jours.

+0

peut-être parce que, dans la où la fonction « -> où() » les premiers arguments est le nom du champ, afin de carbone :: analyser comme arguments premiers dans lequel n'a pas sens – LorenzoBerti

+1

Laravel a une fonction 'whereDate()' qui vous aidera probablement beaucoup dans ce cas. –

Répondre

0

Avez-vous essayé quelque chose comme:

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

Utilisez WhereRaw

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

à devrait être comme

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

Laravel se tourneront automatiquement le "created_at" en objet de carbone, donc vous n'avez pas pour l'analyser.

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

devrait fonctionner pour vous