2017-07-26 97 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