Laravel Eloquent Birthdays查询仅根据日期和月份获取日期列

时间:2016-02-06 19:23:05

标签: date laravel eloquent laravel-5.1 dob

我在mysql中有一个date()列,其中出生日期为mysql的YYYY-MM-DD格式:

$table->date('dob')->nullable();

我正在尝试查询此表,以便列出从今天到接下来7天都有生日的所有用户。我现在有这样的事情:

$date = new Carbon;
$today = $date->format('Y-m-d');
$futureDays = $date->addDays(7)->format('Y-m-d');

$birthdays = SiteUsers::where('dob', '>=', $today)
                        ->where('dob', '<=', $futureDays)
                        ->orderBy('dob', 'ASC')
                        ->get();

上述查询的问题在于它只列出了具有DOB的用户,这些用户只有今年的确切日期才是正确的。我真正想要的是通过仅匹配“日期”和“月份”并忽略“年份”来列出具有生日的用户而不管他们出生的年份。

我不知道如何实现这一目标。有人可以帮帮我吗...

1 个答案:

答案 0 :(得分:3)

在我发布问题后不久,我尝试了一种使用DateOfYear() SQL函数的原始查询的方法。所以这就是我现在所拥有的似乎是通过让用户在接下来的7天内获得生日而无论一年如何工作:

$birthdays = SiteUsers::whereRaw('DAYOFYEAR(curdate()) <= DAYOFYEAR(dob) AND DAYOFYEAR(curdate()) + 7 >=  dayofyear(dob)')
                        ->orderByRaw('DAYOFYEAR(dob)')
                        ->get();

享受