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