2016-02-06 4 views
1

У меня есть date() столбца в MySQL, который имеет дату рождения в формате MySQL в YYYY-MM-DD:Laravel Eloquent рождения запрос, чтобы получить колонки даты на основе даты и месяца только

$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 с точными датами только в этом году, не является правильным. Я действительно хочу, чтобы список пользователей, имеющих дни рождения, независимо от года рождения, сопоставляя только «дату» и «месяц» и игнорируя «год».

Я не знаю, как этого достичь. Может кто-то помочь мне, пожалуйста, ...

ответ

2

Вскоре после того, как я разместил свой вопрос, я попробовал метод с использованием необработанных запросов, который использует функцию SQL. Таким образом, это то, что у меня есть сейчас, которое, похоже, работает, получая пользователей с днями рождения в течение следующих 7 дней, независимо от года:

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