我有一系列的日子,我想检查以Laravel Spark结尾的试验:
$trialIntervals = [10, 5, 3, 1, 0];
我获取所有团队,然后使用diffInDays检查他们的trial_ends_at是否与其中一个间隔约会:
$daysTillTrialEnds = Carbon::parse($team->trial_ends_at)->diffInDays(Carbon::now());
然后我检查这个值是否已经是数据库中的现有结果以及间隔:
if ( in_array($daysTillTrialEnds, $trialIntervals) && !TrialEndingNotification::where('team_id', $team->id)->where('days_notified_at', $daysTillTrialEnds)->count() ) {
// not yet been added to db
}
我有一个名为'days_notified_at'的字段,我正在使用该支票,如果我已经添加了行并通知了客户。但是,该字段永远不会再次使用,我宁愿引用created_at日期并删除该字段。
我的问题是我基本上是这样做的:
->where(Carbon::parse('created_at')->diffInDays(Carbon::now()), $daysTillTrialEnds)
没有收到此错误:
DateTime::__construct(): Failed to parse time string (created_at) at position 0 (c): The timezone could not be found in the database
目标是where只显示具有X天前created_at日期的行。
答案 0 :(得分:1)
->where(Carbon::parse('created_at')->diffInDays(Carbon::now()), $daysTillTrialEnds)
应该像
->where(Carbon::parse($item->created_at)->diffInDays(Carbon::now()), $daysTillTrialEnds)
答案 1 :(得分:1)
您可以像这样在模型中创建范围:
public function scopeActive($query)
{
return $query->whereDate('created_at' , '=', Carbon::today()->subDays( 2 ));
}
在控制器中的调用范围之后:
$post = Post::active()->get();
答案 2 :(得分:0)
你有没有试过像:
$dayAgo = 6 // where here there is your calculation for now How many days
$dayToCheck = Carbon::now()->subDays($dayAgo);
$model->where("created_at", =, $dayToCheck);
答案 3 :(得分:0)
使用WhereRaw
->whereRaw('DATEDIFF(CURDATE(),STR_TO_DATE(created_at, '%Y-%m-%d'))'), $daysTillTrialEnds)
答案 4 :(得分:0)
Laravel会自动将“created_at”变成碳对象,因此您无需解析它。
`$items->where('created_at')->diffInDays(Carbon::now(), $daysTillTrialEnds)'
应该适合你