我有一个命令,可以根据用户保存的搜索字词向用户发送电子邮件。现在我有这个:
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();
}
}
这里我有两个问题......
$u->emailSentAt = Carbon::now();
和$u->save();
,但它不会更新任何内容...... emailSentAt
仍为NULL。interval
(在$user
变量中选中)。间隔的值为1或2,每日或每周警报(分别)。如何根据用户间隔首选项创建命令?如果是每天,我希望每天发送电子邮件...... 答案 0 :(得分:1)
关于你的第一个问题,我提出了两个选择:
Alert
主键,如果有效,请尝试再次保存。Alert::find($id)
,然后保存,看看它是否正常工作。关于你的第二个问题:
DailyEmailCommand
仅查询interval = 1和WeeklyEmailCommand
仅查询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');