簡體   English   中英

Laravel 5.3注冊后獲取最后一個插入ID

[英]Laravel 5.3 get last insert id after registration

使用laravel5.3 PHP 5.6.3

我希望注冊后在用戶表中最后一個插入的id為重定向頁面

所以我想最后插入的id到userprofileadd.blade.php

我也嘗試過-> with('id',$ user-> id)從注冊功能

我不想在注冊后自動登錄,所以我刪除了登錄部分,注冊后,該用戶將被重定向到另一種表單,並且我希望從users表中獲得最新的用戶ID(曾經注冊過)

注冊控制器:

<?php

namespace App\Http\Controllers\Auth;

use App\User;
use App\role;
use App\Userdetails;

use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;

class RegisterController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Register Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles the registration of new users as well as their
    | validation and creation. By default this controller uses a trait to
    | provide this functionality without requiring any additional code.
    |
    */

    use RegistersUsers;

    /**
     * Where to redirect users after registration.
     *
     * @var string
     */
    protected $redirectTo = '/userprofileadd';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware(['auth', 'hr']);
    }

    /**
     * Get a validator for an incoming registration request.
     *
     * @param  array  $data
     * @return \Illuminate\Contracts\Validation\Validator
     */
    protected function validator(array $data)
    {
        return Validator::make($data, [

            'email' => 'required|email|max:255|unique:users',
            'password' => 'required|min:6|confirmed',
            'role'=>'required'
        ]);
    }

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return User
     */
    protected function create(array $data)
    {
        return User::create([

            'email' => $data['email'],
            'password' => bcrypt($data['password']),
            'role_id'=>$data['role'],
        ]);
    }

    public function showregistrationform()
    {
        $roles = role::all(); // get all teams
    return view('auth.register', [ 'roles' => $roles]);
    }
}

注冊功能(注冊后我已注釋掉登錄名)

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

        event(new Registered($user = $this->create($request->all())));

       // $this->guard()->login($user);

        return $this->registered($request, $user)
            ?: redirect($this->redirectPath());
            // ->with('id', $user->id)
    }

如果您使用模型,那么

$user = new User();
$user->name = "JOHN";
$user->save();
$user->id; // contain the inserted id

如果您正在使用db類

$id = DB::table('users')->insertGetId(
   ['email' => 'john@example.com', 'votes' => 0]
);

獲取最后創建的用戶

$user = User::create([

    'email' => $data['email'],
    'password' => bcrypt($data['password']),
    'role_id'=>$data['role'],
]);

$this->lastCreatedUserId = $user->id;

將userId傳遞到自定義重定向頁面

您可以使用Laravel Auth redirectTo method Doc

protected function redirectTo()
{
    return route('customroutename', ['id' => $this->lastCreatedUserId]);
}

例:

<?php

namespace App\Http\Controllers\Auth;

use App\User;
use App\role;
use App\Userdetails;

use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;

class RegisterController extends Controller
{
    public $lastCreatedUser;

    use RegistersUsers;

    protected $redirectTo = '/userprofileadd';

    //The redirectTo method will take precedence over the redirectTo attribute.
    protected function redirectTo()
    {
        //assuming your route name is 'userprofileadd' if not, use your route name of the route('/userprofileadd')
        return route('userprofileadd', ['id' => $this->lastCreatedUser]);
    }

    public function __construct()
    {
        $this->middleware(['auth', 'hr']);
    }

    protected function validator(array $data)
    {
        return Validator::make($data, [

            'email' => 'required|email|max:255|unique:users',
            'password' => 'required|min:6|confirmed',
            'role'=>'required'
        ]);
    }

    protected function create(array $data)
    {
        $user = User::create([

            'email' => $data['email'],
            'password' => bcrypt($data['password']),
            'role_id'=>$data['role'],
        ]);

        $this->lastCreatedUser = $user->id;
        return $user;
    }

    public function showregistrationform()
    {
        $roles = role::all(); // get all teams
    return view('auth.register', [ 'roles' => $roles]);
    }
}

您可以使用UserprofileController的index方法訪問最后創建的用戶,例如,

public function index($id)
{
    $lastCreatedUser = $id;
    //you may pass this variable to the view
}

希望對您有所幫助。讓我知道結果。

我不確定這是否是您要查找的內容,但是您可以這樣做來檢索users表中的最新記錄:

$latestUser = App\User::latest()->first();

希望這會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM