2017-04-18 14 views
1

私のアプリケーションでは、電子メールを送信する必要がある特定の日付が期限切れになっているかどうかをチェックする必要があります。日付はClientsテーブルに保存されます。取得日に5日間を追加するにはどうすればよいのですか?5日間で期限切れになるかどうか確認できますか?今まで私が持っていた機能。日付が期限切れになっていないか確認Laravel Dateフィールド型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側でこのデータをフィルタリングするためのあなたの場合には利点がありません:句here雄弁に

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

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

ドキュメントが。

EDIT

あなたのクエリは私のために壊れています。 groupBy()を使用すると、同じ日を期限切れにするクライアントを1つのエントリにまとめたクライアントの一部しか返されません。この結果、誰もがそれを取得するわけではないので、通知を送信するという目的を破るので、私はむしろgroupBy()を完全に削除します。

+0

恐ろしく!ありがとう! –

+0

ところで、編集された回答をご覧ください。 –

1

使用addDays()は日追加します。

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

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

また、それは代わりに、すべてのデータとフィルタのコレクションをロードのクエリにこれを追加することは常に良い考えですこれは$datesプロパティにsubscription_ends_atを追加すると機能します。

関連する問題