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.
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
Laravel a une fonction 'whereDate()' qui vous aidera probablement beaucoup dans ce cas. –