Search code examples
phparrayslaraveleager-loading

Change eagerloaded array keys


I've got several eager loaded relations in Laravel 5.6. I would like to change the array key name to a property on the eager loaded object.

So let's say I have eager loaded this: enter image description here

How do I make sure that array key 0 and 1 become the name property ("COSTS" and "SAIL_BOAT_FRIENDLY") ?

Is that even possible?

-- EDIT

return Port::filter($filters)
            ->with('scores')
            ->actives()
            ->paginate(14);

Scores relation

public function scores()
{
    return $this->hasMany(Score::class)
        ->select("id", "port_id", "name", DB::raw('AVG(score) as score'))
        ->groupBy('port_id', 'name');
}

Solution

  • You can use keyBy():

    $ports = Port::filter($filters)
            ->with('scores')
            ->actives()
            ->paginate(14);
    
    foreach($ports as $port) {
        $port->setRelation('scores', $port->scores->keyBy('name'));
    }