我可以选择让用户保存搜索字词并接收包含该字词最新搜索结果的电子邮件提醒。用户可以将警报间隔设置为每天或每周。所以,我有一个列interval
,其值为1和2. 1表示每日警报,2表示每周警报。
到目前为止,我有这个...这是我的handle
方法:
public function handle()
{
$user = DB::table('alerts')->select('search', 'email', 'interval')->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 App');
$m->to($u->email)->subject('Your search alert - ' . $u->search);
});
}
}
在Kernel.php
我尝试这个:
protected function schedule(Schedule $schedule)
{
$user = DB::table('alerts')->select('interval')->join('users', 'alerts.uid', '=', 'users.id')->whereNotNull('search')->distinct()->get();
foreach ($user as $u) {
if ($u->interval == 1) {
$schedule->command('email:user')->daily();
}
if ($u->interval == 2) {
$schedule->command('email:user')->weekly();
}
}
}
但我不确定这是否会起作用......即使它有效,是否有更好,更有效的解决方案?我想如果我有10万用户会发生什么......