Это не работает, потому что вы запускаете свой метод updateOrCreate()
внутри каждой итерации, которая никогда не запускается, потому что, как вы указали в заметке "этот пример пользователя не имеет никаких позиций в таблице базы данных"
Здесь вы пытаетесь провести l oop через свои в настоящее время существующие позиции, привязанные к вашей модели пользователя:
$user->positions()->each()
Но это не сработает, потому что у пользователя нет позиций в данный момент.
Я предполагаю, что вы пытаетесь обновить позиции пользователя, где возможно, что у пользователя уже есть одна или несколько из этих позиций, связанных с ним, и вы не хотите создавать дубликаты, для этого вы можно сделать это:
$positions = [
"doctor",
"developer"
];
foreach($positions as $position) {
UserPosition::firstOrCreate(['user_id' => $user->id, 'name' => $position]);
}