ErrorException Создание объекта по умолчанию из пустого значения в Laravel 6
Когда я пытаюсь обновить пользователя, я получаю эту ошибку
эта ошибка указывает на $user->first_name = $request->input('first_name');
метод обновления
public function update($id, Request $request){
$this->validate($request, array(
'first_name' => 'string|max:255',
'last_name' => 'string|max:255',
'email' => "string|email|max:255|unique:users,email,$id",
'password' => "sometimes|nullable |string|min:8,$id",
'avatar' => 'image|mimes:jpg,jpeg,gif,png,svg|max:2048',
));
$password = bcrypt(request('password'));
$user = User::where('email',$request['email'])->first();
$user->first_name = $request->input('first_name');
$user->last_name = $request->input('last_name');
if(!empty($request->password))
{
$user->password = $password;
}
if($request->hasFile('avatar')){
$avatar = $request->file('avatar');
$filename = time() . '.' . $avatar->getClientOriginalExtension();
Image::make($avatar)->resize(300, 300)->save( public_path('/images/avatars/' . $filename ) );
$user->avatar = $filename;
}
$user->roles()->detach();
if ($request['user']) {
$user->roles()->attach(Role::where('name','User')->first());
}
if ($request['editor']) {
$user->roles()->attach(Role::where('name','Editor')->first());
}
if ($request['admin']) {
$user->roles()->attach(Role::where('name','Admin')->first());
}
$user->save();
return redirect('admin/users')->with('success', 'user is successfully saved');
}
2 ответа
Вы должны использовать FindOrFail
метод вместо
поэтому вместо использования этой строки:
$user = User::where('email',$request['email'])->first();
использовать этот:
$user = User::findOrFail($id);
так FindOrFail
получит пользователя id
и если он не существует, он потерпит неудачу и покажет 404 Not found.
Ваше задание $user
имеет значение null, потому что нет записи с email
вы предоставляете.
Использовать findOrFail($request['email'])
так что ты бросишь ModelNotFoundException
в этом сценарии.
ИЛИ
$user = User::where('email',$request['email'])->first();
if(!is_null($user) { // check not null of $user here
$user->first_name = $request->input('first_name');
$user->last_name = $request->input('last_name');
}
Ссылки: