Jesteś pewien, że masz odpowiednio przygotowany formularz bądź inny sposób wysyłki i pole ma nazwę avatar? Prosty test: na końcu widocznego na fragmencie kodu warunku (za $user->avatar) wrzuć coś, aby to sprawdzić, np. dd($avatar_filename); Jeśli zamiast strony pojawi się małe okienko ze ścieżką to znaczy że się wykonuje i przy okazji możesz sprawdzić czy ścieżka jest prawidłowa. Jeśli nie to znaczy że hasFile się nie spełnia, czyli plik jakby się nie przesłał. Albo masz go wtedy pod inną nazwą w formularzu albo brakuje odpowiedniego enctype formularzowi albo nie wiem co, zależy jak go przesyłasz.