Assuming you have a Photo model than belongs to a Gallery model.
You also have set the Dingo plugin and your routes.php file has the following:
$api->get( 'photos/archive/{year}/{month}/{day}', 'PhotosController@getArchive' );
$api->get( 'photos/archive/{year}/{month}', 'PhotosController@getArchive' );
$api->get( 'photos/archive/{year}/', 'PhotosController@getArchive' );
$api->get( 'photos/archive', 'PhotosController@getArchive' );Let’s say you want to have a grouped collection by year/month/day for your photos (based on created date) like this:
[year] => {
[month] => {
[day] => [
item[1],
item[2],
...
item[N],
]
}
}
You can also find the from and to datetimes using:
$from = Carbon::createFromDate( 2016)->startOfYear()->toDateTimeString(); $to = Carbon::createFromDate( 2016 )->endOfYear()->toDateTimeString(); $range = [ $from, $to ];
With all that, Laravel made it easy !
$result = Photo::with( 'gallery' )
->whereBetween( 'created_at', $range )
->orderBy( 'created_at', 'desc' )
->get()
->groupBy( function ( $item ) {
return $item->created_at->format( 'Y' );
} )
->map( function ( $item ) {
return $item->groupBy( function ( $item ) {
return $item->created_at->format( 'm' );
} )->map( function ( $item ) {
return $item->groupBy( function ( $item ) {
return $item->created_at->format( 'Y-m-d' );
} );
} );
} );
VOILA
