2016-01-31 17 views
6

Ich bin durch eine Laravel-Sammlung durch created_at sortiert, um eine Zeitleiste zu erstellen. Das Startdatum für jeden Artikel ist created_at, und das Enddatum ist der created_at des folgenden Artikels. Wenn es sich um den letzten Punkt handelt, dauert das Ereignis nur 30 Tage.Referenz nächster Artikel in einer Laravel-Sammlung

Meine aktuellen Code ist dies:

@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 

Wie Sie hier das Enddatum sehen nur das gleiche wie das Startdatum ist, aber ich brauche es das Startdatum des nächsten Artikels zu sein. Ich dachte, es wäre ein Helfer wie last() für Sammlungen, die ich einfach anrufen könnte next() oder was auch immer. Da es keinen numerischen Schlüssel gibt, kann ich nicht einfach einen hinzufügen und ihn greifen. Die Artikel sind nach Datum sortiert, und das einzige ID-Typ-Feld ist das aus der Datenbank, die eine zufällige ID wie 1434 oder 1356 ist.

Irgendwelche Ideen, wie Sie das Startdatum des nächsten Artikels erhalten, und überprüfen, ob wir bei der letzte Gegenstand? Ich schaute PHP next Funktion, aber ich glaube nicht, dass es tut, was ich brauche.

Vielen Dank

Antwort

2

Die Kollektion wird durch ein Inkrementieren Index eingegeben werden, so sollten Sie in der Lage zu tun ...

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

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

Blade-Syntax natürlich ein bisschen anders, aber hoffentlich zeigen die Idee

+0

Top Tipps. Habe meine Antwort aktualisiert –

+0

Richtige Antwort, mit zwei kleinen Beobachtungen. Zuerst denke ich, dass das 'get' nach der' where' Methode redundant ist, da ich '$ statushistory' bereits eine Sammlung bin (sonst wäre es nicht möglich, darüber zu iterieren, wie in der Frage gezeigt). Da das OP angegeben hat, dass die Sammlung sortiert wurde, könnte es nach dem Abrufen aus der Datenbank sortiert worden sein, so dass die Array-Schlüssel möglicherweise verwechselt wurden, so dass die 'foreach'' $ collection-> values ​​() 'iterieren sollte Die $ index-Werte sind tatsächlich sequentiell. – Bogdan

+0

@Bogdan Diese scheinen nicht zu funktionieren. Die $ next-Variable ist immer null. Irgendwelche Ideen...? – samiles

2

Sie müssen den Iterator zuerst erhalten:

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