2016-03-30 34 views
1

を得る:Laravelは、私は明日、今日誕生日のユーザーを取得するには、このクエリを持っているユーザーの今日と明日誕生日

$birthday[Carbon::now()->format('Y-m-d')] = User::whereRaw("DATE_FORMAT(birthday, '%m-%d') = DATE_FORMAT(now(),'%m-%d')") 
     ->orWhereRaw("DATE_FORMAT(birthday,'%m-%d') = '02-29' and DATE_FORMAT(birthday, '%m') = '02' AND 
     LAST_DAY(NOW()) = DATE(NOW())") 
     ->selectRaw('first_name, last_name, email, birthday') 
     ->get(); 

$birthday[Carbon::now()->addDay()->format('Y-m-d')] = User::whereRaw("DATE_FORMAT(birthday, '%m-%d') = DATE_FORMAT(NOW() + INTERVAL 1 DAY, '%m-%d')") 
     ->orWhereRaw("DATE_FORMAT(birthday,'%m-%d') = '02-29' and DATE_FORMAT(birthday, '%m') = '02' AND 
      LAST_DAY(NOW()) = DATE(NOW())") 
     ->selectRaw('first_name, last_name, email, birthday') 
     ->get(); 

return $birthday; 

クエリは私にこの結果を与える:

{ 
    "2016-03-30": [ 
     { 
      "first_name": "Harmon", 
      "last_name": "Olson", 
      "email": "[email protected]", 
      "birthday": "1990-03-30" 
     }, 
     { 
      "first_name": "John", 
      "last_name": "Doe", 
      "email": "[email protected]", 
      "birthday": "1990-03-30" 
     }, 
    ], 
    "2016-03-31": [ 
     { 
      "first_name": "User10", 
      "last_name": null, 
      "email": "[email protected]", 
      "birthday": "1990-03-31" 
     } 
    ] 
} 

それが適切に働いていた確かにと結果はまさに私が望んでいたものですが、私は私の達成したいものを得るために私の質問を短縮することができます。

どのように短縮するためのアドバイスですか?

ありがとうございます!

答えて

1

あなたはRAWクエリを避けることができます。

\App\User::whereRaw("STR_TO_DATE(CONCAT(YEAR(CURDATE()), '-', MONTH(dob), '-', DAY(dob), '%Y-%m-%d') = DATE_ADD(CURDATE(), INTERVAL 0 DAY)")->get(); 

それとも明日のために:

$birtday['today'] = User::whereDate('birthday', '=', Carbon::today()->toDateString()); 

$birtday['tomorrow'] = User::whereDate('birthday', '=', Carbon::tomorrow()->toDateString()); 
+0

それはなりますが - カーボンはかなりよく、それらを処理します。 –

+1

私はあなたの質問を試みましたが、それは私にnullを返します。私はあなたのクエリが正確な日付で誕生日をチェックするためだと思います。誕生日の例が「1990-03-31」で、「2016-03-31」と表示されます – ssuhat

+0

このクエリは、今日の正確な日付の誕生日があるかどうかを確認します。 – KBeckers

0

このお試しください

\App\User::whereRaw("STR_TO_DATE(CONCAT(YEAR(CURDATE()), '-', MONTH(dob), '-', DAY(dob), '%Y-%m-%d') = DATE_ADD(CURDATE(), INTERVAL 1 DAY)")->get(); 
関連する問題