发送邮件后发送更新表格(Laravel命令)
问题描述:
我有一个命令根据用户保存的搜索条件向用户发送邮件。现在我有这样的:发送邮件后发送更新表格(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,分别为每日或每周警报。我怎样才能让命令按照用户间隔的偏好运行?如果是日常的,我需要的电子邮件被每天发送...
答
试试这个使用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');
+0
它不工作:( – harunB10
答
关于第一个问题,我建议你们两个备选方案:
- 将主键添加到
Alert
select,a如果有效,请尝试再次保存。 - 尝试执行
Alert::find($id)
,然后保存它,看它是否正常工作。
关于你的第二个问题:
- 你可以有两个命令,一个将日常运行和另一每周和每一个命令,你会只检索选择相关的命令区间的用户,例如
DailyEmailCommand
只查询间隔= 1和WeeklyEmailCommand
只查询间隔= 2. - 在每天执行一个命令,查询所有用户,发送电子邮件给选定interval = 1的用户,并检查是否这是Carbon的一周结束,如果这种情况是真的,则发送电子邮件给选择interval = 2的用户。
'$ u'不是用户对象。尝试在你的foreach循环中加载用户对象并修改它。 – aynber
我不确定你说什么......它与用户没有任何关系。它是一个Alert类型的对象。 :/ ...需要更新的列在警报表中。 – harunB10
试过'$ u-> update(['emailSentAt'=> Carbon \ Carbon :: now()]);'? – linktoahref