Ссылка на следующий предмет в коллекции Laravel

Я перебираю коллекцию 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 функция, но я не думаю, что она делает то, что мне нужно.

Большое спасибо

6

Решение

Сначала вы должны получить итератор:

$collection = $collection->getIterator();
$current = current($collection);
$next = next($collection);
3

Другие решения

Коллекция будет снабжена возрастающим индексом, поэтому вы сможете …

$collection = $statushistory->where('itemid', $timelineitemid);

foreach ($collection->values() as $index=>$hist){
//stuff here
$next =$collection->get(++$index) ;
}

Синтаксис Blade, очевидно, немного другой, но, надеюсь, иллюстрирует идею

2

По вопросам рекламы [email protected]