使用Carbon计算Laravel日期差异
使用Carbon计算Laravel日期差异
我试图在到期日期前三天发送电子邮件,但我不确定如何做?
逻辑
- 检索所有到期前三天的订阅者
- 向他们的用户发送电子邮件
代码
我需要检查时间戳的表名为subscribes。
$subscribes = Subscribe::all();
这个表有一个名为expires_at
的列,我需要检查这个列以找到3天剩余。
而我的邮件发送代码是这样的:
Mail::to($user->email)->send(new SubscribeExpire($user, $subscribe));
我对这个Carbon计算有些困惑,有人可以帮忙吗?
更新
根据下面的答案,现在我有了这个:
$subscribes = Subscribe::where('expires_at', Carbon::now()->subDays(3))->get(); $user = []; $package = []; foreach($subscribes as $subscribe){ $user = User::where('email', $subscribe->email); $package = Package::where('id', $subscribe->package_id); } Mail::to($user->email)->send(new SubscribeExpire($user, $package));
但当我运行命令时,出现以下错误:
ErrorException : Trying to get property 'email' of non-object
Laravel Date Difference with Carbon问题的出现原因是用户想要使用Carbon的subDays()方法来查询expires_at字段与当前时间之间的日期差。然而,用户在尝试使用该方法时遇到了问题,并提出了两个问题(Q1和Q2)。用户还提到expires_at字段是一个时间戳,这可能导致无法进行准确的比较。用户在问题中提出了将Mail发送邮件的逻辑和如何在Mail中定义结果数组的问题。
为了解决这个问题,用户得到了以下建议:
1. 将Mail::to($user->email)->send(new SubscribeExpire($user, $package));代码放在foreach循环中,以便对每个用户发送邮件。
2. 针对expires_at字段是时间戳的情况,用户需要重新考虑如何进行日期比较。
以下是整理后的
使用Carbon的subDays()方法来进行Laravel日期差计算的时候,有用户遇到了问题。用户希望通过查询expires_at字段与当前时间的日期差来获取用户的邮箱,并发送邮件给这些用户。用户尝试使用下面的代码来实现这个功能:
$subscribes = Subscribe::where('expires_at', Carbon::now()->subDays(3))->get();
然而,用户在尝试使用这段代码时遇到了两个问题。首先,用户不确定是否需要在循环中使用该代码来获取用户的邮箱。其次,如果在循环中使用该代码,是否会给所有找到的用户发送邮件,还是只会给第一个找到的用户发送邮件。用户还提到了一个关于如何在Mail中定义结果数组的问题。
对于第一个问题,用户得到了一个解决方法:将Mail::to($user->email)->send(new SubscribeExpire($user, $package));代码放在foreach循环中,以便对每个用户发送邮件。
对于第二个问题,用户提到expires_at字段是一个时间戳,这可能导致无法准确比较。用户希望得到关于如何处理时间戳的建议。
希望以上解决方法能帮助到遇到类似问题的开发者们。
Laravel Date Difference with Carbon
问题原因:代码中存在问题,无法正确找到用户并发送电子邮件。
解决方法:更新代码,确保能正确找到用户并发送电子邮件。
// 获取所有订阅信息 $subscribes = Subscribe::whereDate('expires_at', Carbon::now()->addDays(3))->get(); $user = []; $package = []; foreach($subscribes as $subscribe){ // 通过电子邮件找到用户 $user = User::where('email', $subscribe->email)->first(); // 找到关联的套餐 $package = Package::where('id', $subscribe->package_id)->first(); } // 检查是否找到了用户和套餐 if(is_object($user) && is_object($package)){ Mail::to($user->email)->send(new SubscribeExpire($user, $package)); }
遗憾的是,这段代码无法正常工作,我猜测问题可能出在找不到用户,因为它总是返回一个空数组`[]`。
我已经更新了答案。我猜测问题可能出在你将空数组赋给了用户变量。问题可能出在第一行。
真是救命稻草:D。非常感谢,终于能发送电子邮件了。
不客气!:)