我有这个查询来获得明天和今天的生日用户:
$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"
}
]
}
当然它工作正常,结果正是我想要的,但我认为我的查询可以缩短(结合查询成为一个)来获得我想要的东西。
有什么建议如何缩短它?
提前致谢!
您可以避免RAW查询:
$birtday['today'] = User::whereDate('birthday', '=', Carbon::today()->toDateString());
$birtday['tomorrow'] = User::whereDate('birthday', '=', Carbon::tomorrow()->toDateString());
试试这个:
\App\User::whereRaw("STR_TO_DATE( CONCAT(YEAR(CURDATE()), '-', MONTH(dob), '-', DAY(dob), '%Y-%m-%d' ) = DATE_ADD(CURDATE(), INTERVAL 0 DAY)")->get();
或明天:
\App\User::whereRaw("STR_TO_DATE( CONCAT(YEAR(CURDATE()), '-', MONTH(dob), '-', DAY(dob), '%Y-%m-%d' ) = DATE_ADD(CURDATE(), INTERVAL 1 DAY)")->get();