нужно ли оптимизировать запрос к базе в цикле?

$roles = []// данные приходят от пользователя какие роли они выберет

        foreach ($roles as $role){
            $roleTemp = Role::where('slug', $role)->first();
            $registeredEmployee->roles()->attach($roleTemp->id);
        }

Ответы (2 шт):

Автор решения: Volloff

Очень плохая идея делать запросы к БД в цикле, даже если вам надо выбрать только одну запись

→ Ссылка
Автор решения: nomnoms12

Вы можете получить коллекцию с идентификаторами ролей, используя методы whereIn и pluck:

$rolesTempIds = Role::whereIn('slug', $roles)->pluck('id');
$registeredEmployee->roles()->attach($rolesTempIds);
→ Ссылка