2017-05-10 87 views
1

我在Laravel應用程序中有幾個用戶。向Laravel添加自定義作業

每個用戶設置保存在數據庫中的時間(小時和分鐘)以發送電子郵件。

我已經這樣做了:

我有一個執行的每分鐘命令:

$schedule->command(check_emails)->everyMinute(); 

如果用戶設定爲當時送他們的電子郵件,也將被髮送。

有沒有一種方法可以在用戶設置時自動設置命令發送電子郵件,而不需要每隔一分鐘從數據庫檢查一次?

回答

0

您可以將命令傳遞給您的命令。設置控制檯命令的簽名,如下所示。

protected $signature = 'check_emails {time}'; 

此時間是傳遞給您的控制檯命令的參數。數據庫中存儲的值可以是分鐘或小時。

$schedule->command('check_emails minute')->everyMinute(); 
$schedule->command('check_emails hour')->hourly(); 

這兩個時間表將幫助您找到誰已經在每分鐘者優先每小時郵件和電子郵件的用戶。因此,您的代碼可以使條件爲單獨的用戶找到答案。既然你正在利用參數,你不需要創建兩個函數。

在您的控制檯命令句柄代碼可能看起來這樣。

$time = $this->argument('time'); 
// Get the users who set send_email_time at $time 
$users = User::where('send_email_time', $time)->get(); 
// ... 
// Code to send email to $users 
// ...