Где ошибка в связи таблиц?
$roles = User::where('id', '1')->first()->roles();
Так ты только получаешь запрос.
Чтобы получить окончательный результат либо добавляй в конце ...->get(), либо сразу вызывай ->roles:$roles = User::where('id', '1')->first()->roles()->get();
$roles = User::where('id', '1')->first()->roles;В обоих случаях $roles будет хранить коллекцию ролей, а не просто запрос.
Своим запросом вы не получаете коллекцию объектов. Либо ...->roles()->get() либо так:$user = User::where('id', '1')->first();
foreach ($user->roles as $role) {
    echo $role->name;
}