2014-06-06 184 views
1

我希望我的數據按日期分組並將其排序。然後,我希望它是傳遞一個數組,看起來像這樣:如何按日期對日期進行排序和分組,並將它們分組在Laravel中

這是我的查詢:

$events = Event::with('specifications', 'users', 'location') 
         ->join('locations','location_id', '=', 'events.location_id') 
         ->where('locations.zip', '=', $data['location']) 
         ->where('date', '>=', $data['date']) 
         ->orderBy('date') 
         ->get(); 

它給了我這樣一個數組:

[0] => Event Object 
      (
       [...] 
       [attributes:protected] => Array 
        (
         [id] => 1 
         [title] => yyy 
         [image] => img/event/default.jpg 
         [desc] => Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing eli 
        ) 
       [....] 
      ) 
[1] => Event Object 
       (
        [...] 
        [attributes:protected] => Array 
         (
          [id] => 2 
          [title] => xxx 
          [image] => img/event/default.jpg 
          [desc] => Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing eli 
         ) 
        [....] 
       ) 

,但我想要一個數組,它是sortet和這樣的分組(你知道我的意思;)):

[0] = array(
      [0] => date = xx.xx.xxxx 
      [1] => array (
          Event Object() 
         ) 
      ) 
[1] = array(
       [0] => date = yy.yy.yy 
       [1] => array (
          Event Object() 
          ) 
       ) 

,這樣我可以遍歷數組中兩個循環。一個用於日期,另一個用於對象。就像這個不好的例子:

foreach($event_by_date as $evendate){ 
    <h2>$eventdate</h2> 
    foreach($eventdate as $event){ 
     $event->name 
     $event->desc 
     ... etc ... 
    } 
} 

我怎麼用laravel和雄辯的查詢做到這一點? 我不是laravel/php忍者;)

+0

你的問題是不是你想要達到的目的明確,我猜測你想要1.通過更新所有事件和命令他們或要2.選擇你所有的事件,並按日期分組? –

+0

我想分組並按日期排序.. – user3703004

回答

0

我的解決方案。讓我知道如果你會做聰明:

$data = Input::all(); 

    $data['date'] = date("Y-m-d", strtotime($data['date'])); 

    $events = Event::with('specifications', 'users', 'location') 
        ->join('locations','location_id', '=', 'events.location_id') 
        ->where('locations.zip', '=', $data['location']) 
        ->where('date', '>=', $data['date']) 
        ->orderBy('date') 
        ->get(); 

    $events_by_date = array(); 
    $increment = 0; 
    foreach($events as $event){ 
     $formatted_date = substr($event->date, 0, 10); 

     if(!isset($temp_date)){ 
      $temp_date = $formatted_date; 
     } else { 
      if($temp_date != $formatted_date){ 
       $increment++; 
       $temp_date = $formatted_date; 
      }    
     } 

     $events_by_date[$increment]['date'] = $formatted_date; 
     $events_by_date[$increment]['events'][] = $event; 
    } 

    return View::make('event.overview')->with('events_by_date', $events_by_date); 
0

我會做手動,像這樣;

$sortedArray = 
    array_reduce(
     $events, 
     function ($result, $element) 
     { 
       $result[$element->date][] = $element; 
       return $result; 
     } 
    ); 

無需在此排序,因爲您的$events已按日期排序。

而且,您的代碼將不會反正工作,但我的代碼,你會去:

foreach ($event_by_date as $date => $events) { 
    <h2>$date</h2> 
    foreach ($events as $event) { 
     $event->name 
     $event->desc 
     ... etc ... 
    } 
} 
+0

好的,我解決了它。謝謝。我稍後會發布我的解決方案 - 謝謝! – user3703004

相關問題