首页 文章

在Laravel中成功更新用户数据时登录

提问于
浏览
1

RegisterController.php

我在这里添加了一个更新功能,以便当用户想要使用Facebook登录时,他/她将被重定向到一个表单然后填写字段,以便他们的信息将存储在数据库中 .

protected function create(array $data)
{
    if ($data['userEmail']) {
        return User::where('email', $data['userEmail'])
            ->update([
                'phone_number' => $data['phone_number'],
                'address' => $data['address'],
                'country' => $data['country'],
                'city' => $data['city'],
                'zip_code' => $data['zip_code'],
                'state' => $data['state'],
                'is_online' => true,
            ]);
    } else {
        return User::create([
            'full_name' => $data['full_name'],
            'email' => $data['email'],
            'password' => Hash::make($data['password']),
            'phone_number' => $data['phone_number'],
            'address' => $data['address'],
            'country' => $data['country'],
            'city' => $data['city'],
            'zip_code' => $data['zip_code'],
            'state' => $data['state'],
            'is_online' => true,
        ]);
    }
}

IF语句返回true时的错误是这个

“类型错误:传递给Illuminate \ Auth \ SessionGuard :: login()的参数1必须实现接口Illuminate \ Contracts \ Auth \ Authenticatable,给定整数,在C:\ xampp \ htdocs \ esoftwaredeals \ vendor \ laravel \ framework \中调用第35行的src \ Illuminate \ Foundation \ Auth \ RegistersUsers.php“ .

但是,如果它返回false,则不会出现错误并创建新用户,并且会自动重定向到“/ my-account”页面,这是我想在用户成功更新其信息时重定向的页面 .

2 回答

  • 1

    您需要从 create() 方法返回 User 实例:

    protected function create(array $data)
    {
        if ($data['userEmail']) {
            $user = User::where('email', $data['userEmail'])->first();
            $user->update([
                    'phone_number' => $data['phone_number'],
                    'address' => $data['address'],
                    'country' => $data['country'],
                    'city' => $data['city'],
                    'zip_code' => $data['zip_code'],
                    'state' => $data['state'],
                    'is_online' => true,
                ]);
        } else {
            $user = User::create([
                'full_name' => $data['full_name'],
                'email' => $data['email'],
                'password' => Hash::make($data['password']),
                'phone_number' => $data['phone_number'],
                'address' => $data['address'],
                'country' => $data['country'],
                'city' => $data['city'],
                'zip_code' => $data['zip_code'],
                'state' => $data['state'],
                'is_online' => true,
            ]);
        }
    
        return $user;
    }
    

    此外,您应该使用updateOrCreate()方法来保持代码的可维护性 . 例如:

    protected function create(array $data)
    {
        $data['password'] = bcrypt($data['password']);
    
        return User::updateOrCreate(
            array_only($data, ['email', 'full_name']),
            array_except($data, ['email', 'full_name'])
        );
    }
    
  • 0

    更新查询返回受更新查询影响的行数 . 因此,当更新用户成功时,它将返回1 .

    create方法返回已保存的模型实例 . 因此,这会导致代码中出现问题 .

    您可以使用eloquent提供的查找和保存方法,并在if语句中返回用户对象,它将起作用 .

    $user = User::where('email', $email)->first();
    $user->firstname = $firstname;
    $user->lastname = $lastname;
    $user->save();
    return $user;
    

    尝试这样,它应该工作 .

相关问题