У меня есть этот метод, чтобы вернуть все пользователь с днем рождения между двумя датами, я делаю следующий запрос (с использованием Laravel):возвращение углерода дня рождения между двумя датами
public function birthdays()
{
return Contact::whereBetween(DB::raw('DATE_FORMAT(birthday, "%m-%d")'), array(
$this->startDate->format('m-d'),
$this->endDate->format('m-d')))
->get();
}
Он работает безупречно. Однако, когда я ищу между, скажем, с декабря по январь, это не сработает, так как запрос возвращает null, очевидно, потому что он ищет без года. В моей базе данных я просто храню день рождения как полный день рождения, например: 1985-01-10.
Как я могу заставить его работать, чтобы иметь возможность искать между декабрем-> январем или ноябрь-> может?
Редактировать: я не могу добавить год в запрос, так как он не вернет все дни рождения. Или я чего-то не хватает?
public function upcomingMonths($months = '2')
{
$this->startDate = Carbon::now();
$this->endDate = Carbon::now()->addMonth(''.$months.'');
return $this;
}
Я использую класс для более чем просто возвращающимся дни рождения, например, также назначения и другие вещи, так как я цепь методы:
$calendar = new App\Calendar;
$appointments = $calendar->upcomingMonths()->appointments();
$birthdays = $calendar->upcomingMonths()->birthdays();
Edit: Получил это работает так:
if($this->month($this->endDate) < $this->month($this->startDate))
{
$a = Contact::whereBetween(DB::raw('DATE_FORMAT(birthday, "%m-%d")'), array(
$this->startDate->format('m-d'),
'12-31'))
->get();
$b = Contact::whereBetween(DB::raw('DATE_FORMAT(birthday, "%m-%d")'), array(
'01-01',
$this->endDate->format('m-d')))
->get();
$result = $a->merge($b);
dd($result);
}
Так почему бы просто не добавить год в запрос? –
Потому что не каждый родился в том же году. Поэтому я не могу добавить год к запросу, я хочу получить все результаты от ВСЕХ предстоящих дней рождения в следующие x месяцев :) – Hardist
Все еще не вижу проблемы, так как вы определяете, какие startDate и endDate вы используете. –