2017-07-26 98 views
0

我有一个命令根据用户保存的搜索条件向用户发送邮件。现在我有这样的:发送邮件后发送更新表格(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(); 
    } 
} 

在这里,我有两个问题...

  1. 我如何保存每个用户的发送日期和时间?我正在尝试像代码中显示的那样执行此操作。 $u->emailSentAt = Carbon::now();$u->save();但它不更新任何内容... emailSentAt保持为NULL。
  2. 在我的数据库中,我有一列interval(它在$user变量中被选中)。间隔的值为1或2,分别为每日或每周警报。我怎样才能让命令按照用户间隔的偏好运行?如果是日常的,我需要的电子邮件被每天发送...
+2

'$ u'不是用户对象。尝试在你的foreach循环中加载用户对象并修改它。 – aynber

+0

我不确定你说什么......它与用户没有任何关系。它是一个Alert类型的对象。 :/ ...需要更新的列在警报表中。 – harunB10

+0

试过'$ u-> update(['emailSentAt'=> Carbon \ Carbon :: now()]);'? – linktoahref

回答

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'); 
+0

它不工作:( – harunB10

1

关于第一个问题,我建议你们两个备选方案:

  • 将主键添加到Alert select,a如果有效,请尝试再次保存。
  • 尝试执行Alert::find($id),然后保存它,看它是否正常工作。

关于你的第二个问题:

  • 你可以有两个命令,一个将日常运行和另一每周和每一个命令,你会只检索选择相关的命令区间的用户,例如DailyEmailCommand只查询间隔= 1和WeeklyEmailCommand只查询间隔= 2.
  • 在每天执行一个命令,查询所有用户,发送电子邮件给选定interval = 1的用户,并检查是否这是Carbon的一周结束,如果这种情况是真的,则发送电子邮件给选择interval = 2的用户。
+0

好的,第一个解决方案完美无缺,我现在试试第二个,可能与主ID有什么关系?这听起来很奇怪。 – harunB10

+0

对不起,这是我的错误,我只是建议你这两个解决方案,看看哪一个最适合你 –

+0

这是我的错误。我明白你在说什么。我的表情是错误的。应该是“我现在试着解决第二个问题”。 :d – harunB10