Laravel今天和明天都会得到用户的生日

时间:2016-03-30 09:37:40

标签: php laravel

我有这个查询来获得明天和今天的生日用户:

{
    "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"
        }
    ]
}

查询会给我这个结果:

reloadData

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

有关如何缩短它的建议吗?

提前致谢!

3 个答案:

答案 0 :(得分:1)

为了获得今天的生日使用

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

答案 1 :(得分:0)

您可以避免RAW查询:

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

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

答案 2 :(得分:0)

试试这个:

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