Adds possibility to have related models in many-to-many relationship attached to the parent model by defined key values.
Usually it would be related model id
.
call:
$users = User::with('groups')->all()
laravel default:
$user->groups = [0 => $group];
New usage with keyBy:
class User extends Model
{
use HasManyKeyByRelationship;
public function groups()
{
return $this->hasMany(Group::class)->keyBy('id'); // can be string or callable
}
}
result:
$user->groups = [$group->id => $group];
This is specially useful in case there is a need to manipulate pivot records in mass. Ex: users/groups grid where grid fields are some value in pivot record and not all pivot records exist
@foreach($users as $user)
@foreach($groups as $group)
{{optional($user->accesslevels[$group->id])->level}}
@endforeach
@endforeach