php - Laravel pagination with nested foreach
How are you?
I've got a function that returns data from a model. Once I get all the data, I do a foreach loop with it and I add a few more key/values of my own to each result. I got this code:
$pets = Pet::orderBy('created_at', 'desc')->get();
Once I get this data, I do the foreach loop:
foreach ($pets as $pet) {
if ($pet->where('race', '=', 'dog')->exists()) {
$pet->image = 'localhost:8000/races/dog.jpg';
} else {
$pet->image = 'localhost:8000/other/default.jpg';
}
}
The foreach loop adds a key/value to the collection.
What I need, is to be able to paginate the results with the nested foreach result.
return $pets->paginate(3);
Forget about database considerations. This is just an example lookalike table, but the objective is the same, add the pair key/value from the foreach to the collection or array so I can paginate it with all the data.
I know I can paginate with the model altering the query without get, but I wouldn't get all the data I would need.
Can you help me out? Thank you
Answer
Solution:
try map()
$pets = Pet::orderBy('created_at', 'desc')->paginate(3);
$pets->map(function ($row) {
if (true) {
$row['image'] = 'localhost:8000/races/dog.jpg';
} else {
$row['image'] = 'localhost:8000/other/default.jpg';
}
return $row;
});
return $pets;
Source