$items = Item::with('product')->paginate(10);
$items = $items->map(function($product){
$product->name = "Test";
return $product;
});
return response()->json(['items' => $items]);
In my view blade on console paginate objects not showed?
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";
}
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.
Here's a cleaner way to handle this.
$items = Item::with('product')->paginate(10)
->through(function($product){
$product->name = "Test";
return $product;
});
return response()->json(['items' => $items]);
Unlike map() which returns a brand new collection, through() applies to the current retrieved items rather than a brand new collection
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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With