Get the Last Inserted Id Using Laravel Eloquent

PhpDatabaseLaravelEloquent

Php Problem Overview


I'm currently using the below code to insert data in a table:

<?php

public function saveDetailsCompany()
{
    $post = Input::All();

    $data = new Company;
    $data->nombre = $post['name'];
    $data->direccion = $post['address'];
    $data->telefono = $post['phone'];
    $data->email = $post['email'];
    $data->giro = $post['type'];
    $data->fecha_registro = date("Y-m-d H:i:s");
    $data->fecha_modificacion = date("Y-m-d H:i:s");

    if ($data->save()) {
        return Response::json(array('success' => true), 200);
    }
}

I want to return the last ID inserted but I don't know how to get it.

Kind regards!

Php Solutions


Solution 1 - Php

After save, $data->id should be the last id inserted.

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

Can be used like this.

return Response::json(array('success' => true, 'last_insert_id' => $data->id), 200);

For updated laravel version try this

return response()->json(array('success' => true, 'last_insert_id' => $data->id), 200);

Solution 2 - Php

xdazz is right in this case, but for the benefit of future visitors who might be using DB::statement or DB::insert, there is another way:

DB::getPdo()->lastInsertId();

Solution 3 - Php

If the table has an auto-incrementing id, use the insertGetId method to insert a record and then retrieve the ID:

$id = DB::table('users')->insertGetId([
    'email' => '[email protected]',
    'votes' => 0
]);

Refer: https://laravel.com/docs/5.1/queries#inserts

Solution 4 - Php

For anyone who also likes how Jeffrey Way uses Model::create() in his Laracasts 5 tutorials, where he just sends the Request straight into the database without explicitly setting each field in the controller, and using the model's $fillable for mass assignment (very important, for anyone new and using this way): I read a lot of people using insertGetId() but unfortunately this does not respect the $fillable whitelist so you'll get errors with it trying to insert _token and anything that isn't a field in the database, end up setting things you want to filter, etc. That bummed me out, because I want to use mass assignment and overall write less code when possible. Fortunately Eloquent's create method just wraps the save method (what @xdazz cited above), so you can still pull the last created ID...

public function store() {

	$input = Request::all();
	$id = Company::create($input)->id;

	return redirect('company/'.$id);
}

Solution 5 - Php

**** For Laravel ****

Firstly create an object, Then set attributes value for that object, Then save the object record, and then get the last inserted id. such as

$user = new User();        

$user->name = 'John';  

$user->save();

// Now Getting The Last inserted id

$insertedId = $user->id;

echo $insertedId ;

Solution 6 - Php

In laravel 5: you can do this:

use App\Http\Requests\UserStoreRequest;
class UserController extends Controller {
    private $user;
    public function  __construct( User $user )
    {
        $this->user = $user;
    }
    public function store( UserStoreRequest $request )
    {
       $user= $this->user->create([
            'name'              => $request['name'],
            'email'             => $request['email'],
            'password'          => Hash::make($request['password'])
        ]);
        $lastInsertedId= $user->id;
    }
}

Solution 7 - Php

This worked for me in laravel 4.2

$id = User::insertGetId([
	'username' => Input::get('username'),
	'password' => Hash::make('password'),
	'active'   => 0
]);

Solution 8 - Php

There are several ways to get the last inserted id. All are based on what method do you used when inserting. In your case you can get last Id like the following:

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

For others who need to know how can they get last inserted id if they use other insert methods here is how:

  • Using create() method

    $book = Book::create(['name'=>'Laravel Warrior']);

    $lastId = $book->id;

  • Using insertGetId()

    $id = DB::table('books')->insertGetId( ['name' => 'Laravel warrior'] ); $lastId = $id;

  • Using lastInsertId() method

    $lastId = DB::getPdo()->lastInsertId();

Reference https://easycodesolution.com/2020/08/22/last-inserted-id-in-laravel/

Solution 9 - Php

Here's an example:

public static function saveTutorial(){

	$data = Input::all();

	$Tut = new Tutorial;
	$Tut->title = $data['title'];
	$Tut->tutorial = $data['tutorial'];   
	$Tut->save();
	$LastInsertId = $Tut->id;

	return Response::json(array('success' => true,'last_id'=>$LastInsertId), 200);
}

Solution 10 - Php

Use insertGetId to insert and get inserted id at the same time

From doc

> If the table has an auto-incrementing id, use the insertGetId method > to insert a record and then retrieve the ID:

By Model

$id = Model::insertGetId(["name"=>"Niklesh","email"=>"[email protected]"]);

By DB

$id = DB::table('users')->insertGetId(["name"=>"Niklesh","email"=>"[email protected]"]);

For more details : https://laravel.com/docs/5.5/queries#inserts

Solution 11 - Php

Here is how we can get last inserted id in Laravel 4

public function store()
{
    $input = Input::all();

    $validation = Validator::make($input, user::$rules);

    if ($validation->passes())
    {
      
     $user= $this->user->create(array(
            'name' 	            => Input::get('name'),
            'email'             => Input::get('email'),
            'password' 	        => Hash::make(Input::get('password')),
        ));
        $lastInsertedId= $user->id; //get last inserted record's user id value
        $userId= array('user_id'=>$lastInsertedId); //put this value equal to datatable column name where it will be saved
        $user->update($userId); //update newly created record by storing the value of last inserted id
        	return Redirect::route('users.index');
    	}
    return Redirect::route('users.create')->withInput()->withErrors($validation)->with('message', 'There were validation errors.');
    }

Solution 12 - Php

For insert()

Example:

$data1 = array(
         'company_id'    => $company_id,
         'branch_id'    	=> $branch_id
     );

$insert_id = CreditVoucher::insert($data1);
$id = DB::getPdo()->lastInsertId();
dd($id);

Solution 13 - Php

After saving model, the initialized instance has the id:

$report = new Report();
$report->user_id = $request->user_id;
$report->patient_id = $request->patient_id;
$report->diseases_id = $request->modality;
$isReportCreated = $report->save();
return $report->id;  // this will return the saved report id

Solution 14 - Php

Although this question is a bit dated. My quick and dirty solution would look like this:

$last_entry = Model::latest()->first();

But I guess it's vulnerable to race conditions on highly frequented databases.

Solution 15 - Php

After

$data->save()

$data->id will give you the inserted id,

Note: If your autoincrement column name is sno then you should use $data->sno and not $data->id

Solution 16 - Php

You can easily fetch last inserted record Id

$user = User::create($userData);
$lastId = $user->value('id');

It's an awesome trick to fetch Id from the last inserted record in the DB.

Solution 17 - Php

After saving a record in database, you can access id by $data->id

return Response::json(['success' => true, 'last_insert_id' => $data->id], 200)

Solution 18 - Php

In Laravel 5.2 i would make it as clean as possible:

public function saveContact(Request $request, Contact $contact)
{
   $create = $contact->create($request->all());
   return response()->json($create->id,  201);
}

Solution 19 - Php

For Laravel, If you insert a new record and call $data->save() this function executes an INSERT query and returns the primary key value (i.e. id by default).

You can use following code:

if($data->save()) {
    return Response::json(array('status' => 1, 'primary_id'=>$data->id), 200);
}

Solution 20 - Php

You can do this:

$result=app('db')->insert("INSERT INTO table...");

$lastInsertId=app('db')->getPdo()->lastInsertId();

Solution 21 - Php

$objPost = new Post;
$objPost->title = 'Title';
$objPost->description = 'Description';   
$objPost->save();
$recId = $objPost->id; // If Id in table column name if other then id then user the other column name

return Response::json(['success' => true,'id' => $recId], 200);

Solution 22 - Php

For get last inserted id in database You can use

$data = new YourModelName;
$data->name = 'Some Value';
$data->email = '[email protected]';
$data->save();
$lastInsertedId = $data->id;

here $lastInsertedId will gives you last inserted auto increment id.

Solution 23 - Php

The shortest way is probably a call of the refresh() on the model:

public function create(array $data): MyModel
{
    $myModel = new MyModel($dataArray);
    $myModel->saveOrFail();
    return $myModel->refresh();
}

Solution 24 - Php

You can also try like this:

public function storeAndLastInrestedId() {
    $data = new ModelName();
    $data->title = $request->title;
    $data->save();

    $last_insert_id = $data->id;
    return $last_insert_id;
}

Solution 25 - Php

Here it is how it worked for me, family_id is the primary key with auto increment I am using Laravel7

    public function store(Request $request){
        $family = new Family();
        $family->family_name = $request->get('FamilyName');
        $family->family_no = $request->get('FamilyNo');
        $family->save();
        //family_id is the primary key and auto increment
        return redirect('/family/detail/' .  $family->family_id);
    }

Also in the Model Family file which extends Model, should have the increment set to true otherwise the above $family-->family_id will return empty

    public $incrementing = true;
  

Solution 26 - Php

After Saving $data->save(). all data is pushed inside $data. As this is an object and the current row is just saved recently inside $data. so last insertId will be found inside $data->id.

Response code will be:

return Response::json(array('success' => true, 'last_insert_id' => $data->id), 200);

Solution 27 - Php

Using Eloquent Model

$user = new Report();        
$user->email= '[email protected]';  
$user->save();
$lastId = $user->id;

Using Query Builder

$lastId = DB::table('reports')->insertGetId(['email' => '[email protected]']);

Solution 28 - Php

You can get last inserted id with same object you call save method;

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

So you can simply write:

if ($data->save()) {
    return Response::json(array('success' => true,'inserted_id'=>$data->id), 200);
}

Solution 29 - Php

public function store( UserStoreRequest $request ) {
    $input = $request->all();
    $user = User::create($input);
    $userId=$user->id 
}

Solution 30 - Php

Using Eloquent Model

use App\Company;

public function saveDetailsCompany(Request $request)
{

$createcompany=Company::create(['nombre'=>$request->input('name'),'direccion'=>$request->input('address'),'telefono'=>$request->input('phone'),'email'=>$request->input('emaile'),'giro'=>$request->input('type')]);

// Last Inserted Row ID

echo $createcompany->id;

}

Using Query Builder

$createcompany=DB::table('company')->create(['nombre'=>$request->input('name'),'direccion'=>$request->input('address'),'telefono'=>$request->input('phone'),'email'=>$request->input('emaile'),'giro'=>$request->input('type')]);

echo $createcompany->id;

For more methods to get Last Inserted Row id in Laravel : http://phpnotebook.com/95-laravel/127-3-methods-to-get-last-inserted-row-id-in-laravel

Solution 31 - Php

Optional method will be:

$lastID = DB::table('EXAMPLE-TABLE')
                ->orderBy('id', 'desc')
                ->first();

$lastId = $lastProduct->id;

Source from Laravel 5.8 version

Solution 32 - Php

You can use $this constructor variable to achieve "Last Inserted Id Using Laravel Eloquent" (without adding any extra column) in current function or controller.

public function store(Request $request){
	$request->validate([
		'title' => 'required|max:255',
		'desc' => 'required|max:5000'
	]);

	$this->project = Project::create([
		'name' => $request->title,
		'description' => $request->desc,
	]);

    dd($this->project->id);  //This is your current/latest project id
	$request->session()->flash('project_added','Project added successfully.');
	return redirect()->back();

}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSoldierCorpView Question on Stackoverflow
Solution 1 - PhpxdazzView Answer on Stackoverflow
Solution 2 - PhpBenubirdView Answer on Stackoverflow
Solution 3 - PhpAamirView Answer on Stackoverflow
Solution 4 - PhpdaveView Answer on Stackoverflow
Solution 5 - PhpMajbah HabibView Answer on Stackoverflow
Solution 6 - PhpMujiburView Answer on Stackoverflow
Solution 7 - Phpuser28864View Answer on Stackoverflow
Solution 8 - PhpAbdulhakim ZeinuView Answer on Stackoverflow
Solution 9 - PhpjsdevView Answer on Stackoverflow
Solution 10 - PhpNiklesh RautView Answer on Stackoverflow
Solution 11 - PhpQamar UzmanView Answer on Stackoverflow
Solution 12 - PhpFaridul KhanView Answer on Stackoverflow
Solution 13 - PhpAmirView Answer on Stackoverflow
Solution 14 - PhpdustypawsView Answer on Stackoverflow
Solution 15 - PhpAbhishek GoelView Answer on Stackoverflow
Solution 16 - PhpPriyanka PatelView Answer on Stackoverflow
Solution 17 - PhpTayyab HussainView Answer on Stackoverflow
Solution 18 - PhpbobbybackblechView Answer on Stackoverflow
Solution 19 - PhpHItesh TankView Answer on Stackoverflow
Solution 20 - PhpDnyaneshwar HarerView Answer on Stackoverflow
Solution 21 - PhpKamal MaisuriyaView Answer on Stackoverflow
Solution 22 - PhpPPLView Answer on Stackoverflow
Solution 23 - PhpautomatixView Answer on Stackoverflow
Solution 24 - PhpRashed ZamanView Answer on Stackoverflow
Solution 25 - PhpsurajavView Answer on Stackoverflow
Solution 26 - PhpsabuzView Answer on Stackoverflow
Solution 27 - PhpMd. Saidur Rahman MilonView Answer on Stackoverflow
Solution 28 - PhpinfomasudView Answer on Stackoverflow
Solution 29 - Phptemporary accountView Answer on Stackoverflow
Solution 30 - PhpKarthikView Answer on Stackoverflow
Solution 31 - PhpGustavo Morillo MarinView Answer on Stackoverflow
Solution 32 - PhpMohammad GayashuddinView Answer on Stackoverflow