【问题标题】:ErrorException Creating default object from empty value in Laravel 6ErrorException在Laravel 6中从空值创建默认对象
【发布时间】:2020-03-15 11:13:37
【问题描述】:

当我尝试更新用户时出现此错误

这个错误指出在$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');
}

【问题讨论】:

  • 检查您的 $user 变量。必须为空

标签: mysql laravel laravel-5 laravel-6 laravel-6.2


【解决方案1】:

您的分配$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-single-models

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

【讨论】:

    【解决方案2】:

    您应该改用FindOrFail 方法

    所以不要使用这一行:

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

    使用这个:

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

    所以FindOrFail 将通过id 获取用户,如果它不存在,它将失败并显示 404 Not found。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-18
      • 1970-01-01
      • 2018-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-29
      相关资源
      最近更新 更多