首页 文章

Laravel 5.2 - 如何获取新创建的用户的ID并将其传递给控制器

提问于
浏览
5

我之前从未使用过Laravel,我正在使用laravels默认用户注册和auth进行3部分注册,用于表单的第1步 . 每一步都有自己的表 . 步骤1s表的id列用于链接所有3个表 .

目前我正在使用 $id = Auth::user()->id 来获取步骤2控制器中的登录用户ID . 相反,如何在创建用户之后将id路由/传递给步骤2控制器存储方法并将视图重定向到步骤2?

在authcontroller中

protected function create(array $data)
{

    return User::create([
        'email' => $data['email'],
        'password' => bcrypt($data['password']),
        'firstName' => $data['firstName'],
        'middleName' => $data['middleName'],
        'lastName' => $data['lastName'],
    ]);
}

在Illuminate \ Foundation \ Auth \ RegistersUsers;

public function register(Request $request)
{
    $validator = $this->validator($request->all());

    if ($validator->fails()) {
        $this->throwValidationException(
            $request, $validator
        );
    }

    Auth::guard($this->getGuard())->login($this->create($request->all()));

    // pass id to store method in profile and redirect to profileinfo 
    return view('user/profileinfo');
}

}

4 回答

  • 2

    试试这种方法:

    $data = new FooModel(); // or in your case User();
    $data->column_1 = 'value_1';
    $data->column_2 = 'value_2';
    $data->save();
    

    现在在调用 save() 之后, $data->id 应该为您提供最后插入的ID,以便您可以在任何地方使用它 .

    请记住,如果PK列(具有ID的列)是 not auto-increment ,它将始终返回0 .

  • 6

    您可以将 create() 功能更改为

    protected function create(array $data)
    {
      $user = new User();
      $user->email = $data['email'];
      $user->password = bcrypt($data['password']),
      $user->firstName = $data['firstName'],
      $user->middleName = $data['middleName'],
      $user->lastName = $data['lastName'];
      $user->save();
    
      return $user->id;
     }
    
  • 3

    您可以通过以下方式更改AuthController中的create方法:

    protected function create(array $data)
    {
        $user =  User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
    
        ]);
    
        $id= $user->id; // Get current user id
    
        return $user;
    }
    
  • 0

    而不是使用返回 truefalsecreate() 方法,您应该使用返回模型的 save() 方法:

    $id = $data->save()->id;
    

    但是如果你仍然需要简短的语法,你可以使用mass assignment

    $userModel = new User($data);
    $userModel->save();
    $id = $userModel->id;
    

相关问题