2017-04-18 106 views
1

在我的應用程序中,我必須檢查某個日期是否已過期,如果必須發送電子郵件。日期保存在Clients表中。如何在檢索日期添加5天,以便我可以檢查它是否會在5天內過期?我到目前爲止的功能。檢查日期是否已過期Laravel日期字段類型SQL

public function handle() { 

    $users =\App\Client::select('subscription_ends_at') 
     ->groupBy('subscription_ends_at') 
     ->get(); 

    $data_now = Carbon::now(); 

    foreach($date_expired as $users){ 
     // $date_expired + 5 days 

     if($date_expired > $data_now){ 
      //Send e-mail 
     } 
    } 
} 

回答

2

你應該通過使用whereDate()來使你的查詢成爲你的查詢的一部分。有沒有在你的情況下,對PHP端過濾這個數據沒有任何好處:在口才

$now = Carbon::now()->addDays(5); 

$users =\App\Client::select('subscription_ends_at') 
    ->groupBy('subscription_ends_at') 
    ->whereDate('date_expired', '>', $now->toDateString()), 
    ->get(); 

文檔where子句here

編輯

您的查詢壞了我。使用groupBy()將使其僅返回一小部分客戶將同一天到期的客戶組合成一個條目。這個結果打破了發送通知的目的,因爲不是每個人都能得到它,所以我寧願完全刪除groupBy()

+0

太棒了!謝謝! –

+0

順便說一句:請參閱編輯的答案。 –

1

使用addDays()添加天:

Carbon::now()->addDays(5); 

而且,它總是一個好主意,把它添加到查詢,而不是加載所有的數據和過濾器收集:

->where('subscription_ends_at', '>', Carbon::now()->addDays(5)) 

如果您將subscription_ends_at添加到$dates屬性,這將工作。