2014-02-20 2 views
1

Я в настоящее время есть множество объектов, которые я пытаюсь разобраться в заголовкам, например, в данный момент у меня есть выход табличный так:Добавление заголовков в пределах объекта

2014-02-01 14: 15:00 14:50:00

2014-02-01 14:50:00 15:25:00

2014-02-02 11:20:00 12:30: 00

2014-02-02 12:30:00 13:05:00

2014-02-04 17:10:00 17:40:00

2014-02-04 17 : 45: 00 18:20:00

Но что я ищу немного что-то вроде этого:

первый Febuary

2014-02-01 14:15:00 14:50:00

2014-02-01 14:50:00 15:25:00

второй Febuary

2014-02-02 11:20:00 12:30:00

2014-02-02 12:30:00 13:05:00

четвёртую Febuary

2014-02-04 17:10:00 17:40:00

2014-02-04 17:45:00 18:20:00

Я использую Laravel получить эти объекты из базы данных, и каждый из них в пределах массива выглядит немного что-то вроде этого:

object(Illuminate\Database\Eloquent\Collection)#922 (1) { 
    ["items":protected]=> 
    array(228) { 
    [0]=> 
    object(Lesson)#695 (20) { 
     ["attributes":protected]=> 
     array(16) { 
     ["id"]=> 
     string(4) "7312" 
     ["date"]=> 
     string(10) "2014-02-01" 
     ["start_time"]=> 
     string(8) "14:15:00" 
     ["end_time"]=> 
     string(8) "14:50:00" 
     } 
    } 
    [1]=> etc... 

Кто-нибудь знает, можно ли организовать заголовки таким образом? Является ли это простой функцией, которую я не замечаю?

ответ

1

Насколько я знаю, нет простой функции делать то, что вы хотите (тип группы).Предполагая, что вы заказываете по дате, хотя (или как-то подобные даты сгруппированы в коллекции), вы можете использовать код вроде следующего:

// controller action 
public function index() 
{ 
    // get all dates, ordered by date 
    $_dates = Date::orderby('date')->get(); 

    $dates = []; 
    $date = new Collection; // not really required, just feels nicer 
    $curDate = false; 

    foreach ($_dates as $_date) { 
     // if we have a new date, store current collection in master array, 
     // re-instantiate a blank collection, and set the current date 
     if ($_date->date != $curDate) { 
      if ($curDate !== false) { 
       $dates[$curDate] = $date; 
      } 
      $date = new Collection; 
      $curDate = $_date->date; 
     } 
     $date->push($_date); 
    } 

    return View::make('index', compact('dates')); 
} 

// view 
@foreach ($dates as $date => $items) 
    <h3>{{{ $date }}}</h3> 
    <ul> 
     @foreach ($items as $item) 
      <li>{{{ $item->date }}} {{{ join(' ', $item->times) }}}</li> 
     @endforeach 
    </ul> 
@endforeach 

Очевидно, что вы могли бы извлечь, что группы с помощью логики к вспомогательной функции (и сделать переменные имена много нет путаницы!)

+0

Глядя на это, не будет ли этот первый ключ для ключей заменен на 0 вместо даты? –

+0

Совершенно верно. Теперь я исправил образец кода, чтобы больше не добавлять первую (пустую) коллекцию в основной массив (в индекс 'false'th). – alexrussell

0

Ну да - извлечение объекта из БД, траверсы и ввести его в поле зрения, что-то вроде этого:

@foreach($collection as $object) 
    <ul> 
    {{$date}}//or fetch date also 
    <li>{{$object[0]["record"]}}</li> 
    </ul> 
@enforeach 

@foreach($collection as $object) 
    <ul> 
    {{$date}}//or fetch date also 
    <li>{{$object[1]["record"]}}</li> 
    </ul> 
@enforeach 

Извините за неоспоримым универсальна, но сбор и объект будет вашей коллекции и имена объектов/индекс.

+0

Это не достигает того, что OP хочет, насколько я могу судить. – alexrussell

Смежные вопросы