我为用户提供电子邮件提醒功能。他们可以激活他们是否希望每天或每周收到警报。 在警报表中我有列:uid(userID),interval,searchTerm,emailSentAt等......
所以,我有这个命令:
public function handle()
{
$user = Alert::select('alerts.id', '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.tv', 'My Company');
$m->to($u->email)->subject('Your search alert - ' . $u->search);
});
$u->emailSentAt = Carbon::now();
$u->save();
}
}
在这里,我发送电子邮件并将发送时间保存在emailSentAt
列中。
在Kernel.php中
protected function schedule(Schedule $schedule)
{
$schedule->command('email:user')->dailyAt('13:00');
}
对于数据库中的interval
列,我有两个值:0(每天)和1(每周)。
如何根据间隔列运行此命令?如果用户有0,我想每天13:00给他发电子邮件,1我想每周发送一次。
答案 0 :(得分:0)
我会在计划中添加一个新任务,如下所示:
$schedule->command('email:user', ['weekly'=> true])->weekly('15:00');
然后在handle()中我会添加:
$weekly = $this->argument('weekly');
然后使用$ weekly来过滤查询。这样您就可以选择何时发送每日和每周邮件。
编辑:抱歉,同时添加/更改此命令,它告诉命令每周参数是可选的:
protected $signature = 'email:user {weekly?}';