发送电子邮件后更新表格行(Laravel Command)

时间:2017-07-26 13:35:44

标签: php laravel

我有一个命令,可以根据用户保存的搜索字词向用户发送电子邮件。现在我有这个:

public function handle()
{
    $user = Alert::select('search', 'email', 'interval', 'emailSentAt')->join('users', 'alerts.uid', '=', 'users.id')->whereNotNull('search')->distinct()->get();

    foreach ($user as $u) {
        $cl      = new SphinxSearch();
        $results = $cl->search('@*' . $u->search, 'spots');
        $results = $cl->limit(10);
        $results = $cl->setMatchMode(\Sphinx\SphinxClient::SPH_MATCH_EXTENDED);
        $results = $cl->setSortMode(\Sphinx\SphinxClient::SPH_SORT_ATTR_DESC, "start");
        $results = $cl->get();

        Mail::send('emails.newSearchAlert', ['u' => $u, 'results' => $results], function ($m) use ($u) {

            $m->from('noreply@mydomain.com', 'My company');

            $m->to($u->email)->subject('Your search alert - ' . $u->search);
        });

        $u->emailSentAt = Carbon::now();
        $u->save();
    }
}

这里我有两个问题......

  1. 如何为每个用户保存发送日期和时间?我试图这样做,就像在代码中显示的那样。 $u->emailSentAt = Carbon::now();$u->save();,但它不会更新任何内容...... emailSentAt仍为NULL。
  2. 在我的数据库中,我有一列interval(在$user变量中选中)。间隔的值为1或2,每日或每周警报(分别)。如何根据用户间隔首选项创建命令?如果是每天,我希望每天发送电子邮件......

2 个答案:

答案 0 :(得分:1)

关于你的第一个问题,我提出了两个选择:

  • 在选择中添加Alert主键,如果有效,请尝试再次保存。
  • 尝试执行Alert::find($id),然后保存,看看它是否正常工作。

关于你的第二个问题:

  • 您可以拥有两个命令,一个将每天运行,另一个每周运行,每个命令只检索选择了与命令相关的间隔的用户,例如: DailyEmailCommand仅查询interval = 1和WeeklyEmailCommand仅查询interval = 2.
  • 在一个将每天执行的命令中,查询所有用户,将电子邮件发送给选择interval = 1的用户,并检查是否是使用Carbon的一周结束,如果是这样,则发送电子邮件选择interval = 2的用户。

答案 1 :(得分:0)

使用laravel

尝试此操作
use Carbon\Carbon;
$u->emailSentAt = Carbon::now()->toDayDateTimeString(); //date
$u->emailSentAt = Carbon::now()->timestamp; // timestamp

使用php

$date = new DateTime();
$u->emailSentAt = $date->format('Y-m-d H:i:s');
相关问题