我在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的用户,这些用户只有今年的确切日期才是正确的。我真正想要的是通过仅匹配“日期”和“月份”并忽略“年份”来列出具有生日的用户而不管他们出生的年份。
我不知道如何实现这一目标。有人可以帮帮我吗...
答案 0 :(得分:3)
在我发布问题后不久,我尝试了一种使用DateOfYear()
SQL函数的原始查询的方法。所以这就是我现在所拥有的似乎是通过让用户在接下来的7天内获得生日而无论一年如何工作:
$birthdays = SiteUsers::whereRaw('DAYOFYEAR(curdate()) <= DAYOFYEAR(dob) AND DAYOFYEAR(curdate()) + 7 >= dayofyear(dob)')
->orderByRaw('DAYOFYEAR(dob)')
->get();
享受