Я перебираю коллекцию Laravel, отсортированную по created_at
составить график. Дата начала для каждого элемента created_at
и дата окончания created_at
следующего пункта. Если это последний элемент, событие длится всего 30 дней.
Мой текущий код такой:
@foreach ($statushistory->where('itemid', $timelineitemid) as $hist)
[ '{{$hist->newstatus}}', new Date({{$hist->created_at->format('Y')}}, {{$hist->created_at->format('n')-1}}, {{$hist->created_at->format('j')}}), new Date({{$hist->created_at->format('Y')}}, {{$hist->created_at->format('n')-1}}, {{$hist->created_at->format('j')}}) ],
@endforeach
Как вы можете видеть здесь, дата окончания точно такая же, как и дата начала, но мне нужно, чтобы она была датой начала следующего элемента. Я думал, что будет помощник, как last()
для коллекций, которые я мог бы просто назвать next()
или что угодно. Поскольку здесь нет числового ключа, я не могу просто добавить его и взять. Элемент отсортирован по дате, и единственное поле типа идентификатора — это поле из базы данных, которое является случайным идентификатором, например 1434 или 1356.
Любые идеи о том, как получить начальную дату следующего элемента и проверить, находимся ли мы на последнем элементе? Я посмотрел на PHP next
функция, но я не думаю, что она делает то, что мне нужно.
Большое спасибо
Сначала вы должны получить итератор:
$collection = $collection->getIterator();
$current = current($collection);
$next = next($collection);
Коллекция будет снабжена возрастающим индексом, поэтому вы сможете …
$collection = $statushistory->where('itemid', $timelineitemid);
foreach ($collection->values() as $index=>$hist){
//stuff here
$next =$collection->get(++$index) ;
}
Синтаксис Blade, очевидно, немного другой, но, надеюсь, иллюстрирует идею