Laravel获得用户今天和明天的生日


Laravel get user today and tomorrow birthday

我要查询明天和今天的生日用户:

$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": "GleasonSwaniawski.Jeanne@yahoo.com",
          "birthday": "1990-03-30"
        },
        {
          "first_name": "John",
          "last_name": "Doe",
          "email": "john.doe@yahoo.com",
          "birthday": "1990-03-30"
        },
    ],
    "2016-03-31": [
        {
          "first_name": "User10",
          "last_name": null,
          "email": "user10@user.com",
          "birthday": "1990-03-31"
        }
    ]
}

当然它工作正常,结果正是我想要的,但我认为我的查询可以缩短(将查询合并为一个),以获得我想要的结果。

有什么建议可以缩短它吗?

提前感谢!

要获得今天的生日,请使用

User::whereMonth('birth_date', Carbon::now()->format('m'))
->whereDay('birth_date', Carbon::now()->format('d'))
->get();

明天生日的

User::whereMonth('birth_date', Carbon::now()->format('m'))
->whereDay('birth_date', Carbon::now()->addDay()->format('d'))
->get();

注:在表

中,birth_date列日期格式为yyyy-mm-dd,数据类型为date

试试这个:

'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();

您可以避免RAW查询:

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