Laravel paginate method not working with map collection?
As, given in Laravel docs, map()
method creates a new collection. To modify the values in the current collection, use transform()
method.
$items->getCollection()->transform(function ($product) { $product->name = "Test"; return $product;});
Also, since, paginator's items are a collection. You can use foreach
directly on $items
foreach ($items as $item){ $item->name = "Test";}
You should save the data in a collection, work on them, inject them back, something like this:
$page = Input::get('page', 1);$data = Item::with('product')->getByPage($page, 10);$tempItems = $data->items;$tempItems = $tempItems->map(function($product){ $product->name = "Test"; return $product; });$objects = Paginator::make($tempItems, $data->totalItems, 10);
An easy solution would be to just use tap()
like so:
return tap(Item::with('product')->paginate(10))->map(...);
The tap()
helper always returns its argument, so you can call any function you like and still return the paginator instance. This is often used in instances like return tap($user)->save()
, where the save
function returns a boolean but you still want to return the $user
object.