2013-05-11 3 views
0

У меня есть следующий метод в моей модели событий для моих событий:Группа События по неделе начинающееся в красноречивых

public static function getEvents($perPage = 10) 
{ 
    $events = Event::where('active', '=', 1)->paginate($perPage); 

    return $events; 
} 

Каждое событие имеет START_DATE, и мне нужно, чтобы принять эту дату начала и сгруппировать результаты в представлении начиная с недели, как в понедельник недели происходит каждое событие. У меня это у меня в контроллере:

public function index() 
{ 
    $events = Event::getEvents($perPage = 5); 

    $this->layout->content = View::make('events.index')->with('events', $events); 
} 

Может ли кто-нибудь помочь мне сгруппировать эти события по неделям? Благодарю.

Я часть пути там с точки зрения получения неделю дата начала с помощью:

foreach ($events as $event) 
{ 
    $start_date = DateTime::createFromFormat('Y-m-d', $event->start_date); 
    $week = $start_date->format('YW'); 
    $monday = 1; 

    $day_offset = ($monday - $start_date->format('N')); 

    $week_commencing = $start_date->modify("$day_offset days"); 
    $week_commencing = $week_commencing->format('jS F Y'); 
} 

Теперь мне просто нужно использовать, чтобы сгруппировать события, но я не знаю, как.

EDIT: Я чувствую, что приближаюсь к решению, но все же нуждаюсь в небольшой помощи. Теперь у меня есть ниже в моем контроллере, и он распечатывает 1 неделю, начиная с всех событий, но когда var_dump (ing) $ events-> weeks_commencing имеет только 1 дату в объекте, так что я почти там. Любые указатели ребята ?:

foreach ($events as $event) 
    { 
     $start_date = DateTime::createFromFormat('Y-m-d', $event->start_date); 
     $week = $start_date->format('YW'); 
     $monday = 1; 

     $day_offset = ($monday - $start_date->format('N')); 

     $week_commencing = $start_date->modify("$day_offset days"); 

     if (!array_key_exists($week, $events)) 
     { 
      $events->weeks_commencing = (object) array(
       'week'  => $week_commencing->format('jS F Y') 
      ); 
     } 
    } 

EDIT: OK Теперь у меня это в моем контроллере. Он приближается, но не совсем прав.

foreach ($events as $event) 
    { 
     $start_date = DateTime::createFromFormat('Y-m-d', $event->start_date); 
     $week = $start_date->format('YW'); 
     $monday = 1; 

     $day_offset = ($monday - $start_date->format('N')); 

     $week_commencing = $start_date->modify("$day_offset days"); 

     if (array_key_exists($week, $events)) 
     { 
      $events = (object) array(
       'week'  => $week_commencing->format('jS F Y'), 
       'events' => array() 
      ); 
     } 

     $events->events[] = $event; 
    } 

ответ

0

ОК, так что я решил свою проблему сейчас, со следующим кодом:

public function index() 
{ 
    $events = Event::getEvents($perPage = 10); 

    $events_by_week = array(); 

    foreach ($events as $event) 
    { 
     $start_date = DateTime::createFromFormat('Y-m-d', $event->start_date); 
     $week = $start_date->format('YW'); 
     $monday = 1; 

     $day_offset = ($monday - $start_date->format('N')); 

     $week_commencing = $start_date->modify("$day_offset days"); 

     if (!array_key_exists($week, $events_by_week)) 
     { 
      $events_by_week[$week] = (object) array(
       'week'  => $week_commencing->format('jS F Y'), 
       'events' => array() 
      ); 
     } 

     $events_by_week[$week]->events[] = $event; 
    } 

    $this->layout->content = View::make('events.index')->with(array('events_by_week' => $events_by_week, 'events' => $events)); 
}