ErrorException Создание объекта по умолчанию из пустого значения в Laravel 6 - PullRequest
0 голосов
/ 15 марта 2020

когда я пытаюсь обновить пользователя, я получил эту ошибку

эта ошибка указывает на $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 ]

0 голосов
/ 15 марта 2020

Вы должны использовать FindOrFail метод вместо

, поэтому вместо использования этой строки:

$user = User::where('email',$request['email'])->first();

используйте это:

$user = User::findOrFail($id);

, поэтому FindOrFail получит пользователя по id, и если он не существует, он потерпит неудачу и покажет 404 Не найдено.

0 голосов
/ 15 марта 2020

Ваше назначение $user является нулевым, поскольку нет записи с 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');  
}

Ссылки:

https://laravel.com/docs/5.7/eloquent#retrieving - одиночные модели

https://laracasts.com/discuss/channels/laravel/errorexception-in-profilecontrollerphp-line-98-creating-default-object-from-empty-value

...