使用Carbon计算Laravel日期差异

10 浏览
0 Comments

使用Carbon计算Laravel日期差异

我试图在到期日期前三天发送电子邮件,但我不确定如何做?

逻辑

  1. 检索所有到期前三天的订阅者
  2. 向他们的用户发送电子邮件

代码

我需要检查时间戳的表名为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

0
0 Comments

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字段是一个时间戳,这可能导致无法准确比较。用户希望得到关于如何处理时间戳的建议。

希望以上解决方法能帮助到遇到类似问题的开发者们。

0
0 Comments

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。非常感谢,终于能发送电子邮件了。

不客气!:)

0