我有一个命令根据用户保存的搜索条件向用户发送邮件。现在我有这样的:发送邮件后发送更新表格(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('[email protected]', '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,分别为每日或每周警报。我怎样才能让命令按照用户间隔的偏好运行?如果是日常的,我需要的电子邮件被每天发送...
'$ u'不是用户对象。尝试在你的foreach循环中加载用户对象并修改它。 – aynber
我不确定你说什么......它与用户没有任何关系。它是一个Alert类型的对象。 :/ ...需要更新的列在警报表中。 – harunB10
试过'$ u-> update(['emailSentAt'=> Carbon \ Carbon :: now()]);'? – linktoahref