2016-08-01 11 views
0

У меня есть этот метод, чтобы вернуть все пользователь с днем ​​рождения между двумя датами, я делаю следующий запрос (с использованием 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); 
     } 
+0

Так почему бы просто не добавить год в запрос? –

+0

Потому что не каждый родился в том же году. Поэтому я не могу добавить год к запросу, я хочу получить все результаты от ВСЕХ предстоящих дней рождения в следующие x месяцев :) – Hardist

+0

Все еще не вижу проблемы, так как вы определяете, какие startDate и endDate вы используете. –

ответ

1

Если вы не можете добавить год и проблема в конце года, вы можете обнаружить, если дата окончания изменился в год (дата окончания месяца < дата начала месяца), а затем разделить й e запрос в 2: один от даты начала до конца года, а другой - с начала года до даты окончания. Затем вам нужно объединить обе коллекции и вернуть их.

+1

Имеет смысл, и я на самом деле об этом не думал. Так просто.. :) – Hardist