SoldierCorp
SoldierCorp

Reputation: 7700

Get the Last Inserted Id Using Laravel Eloquent

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!

Upvotes: 414

Views: 844171

Answers (30)

surajav
surajav

Reputation: 21

Here 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;

Upvotes: 2

Abdulhakim Zeinu
Abdulhakim Zeinu

Reputation: 3829

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/

Upvotes: 32

xdazz
xdazz

Reputation: 160833

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);

Upvotes: 568

Priyanka Patel
Priyanka Patel

Reputation: 353

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.

Upvotes: 8

Md Rasheduzzaman
Md Rasheduzzaman

Reputation: 1

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;
}

Upvotes: 1

Faridul Khan
Faridul Khan

Reputation: 2007

For insert()

Example:

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

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

Upvotes: 14

Mohammad Gayashuddin
Mohammad Gayashuddin

Reputation: 21

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();

}

Upvotes: 0

Md Masud
Md Masud

Reputation: 2693

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);
}

Upvotes: 1

Gustavo Morillo Marin
Gustavo Morillo Marin

Reputation: 11

Optional method will be:

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

$lastId = $lastProduct->id;

Source from Laravel 5.8 version

Upvotes: -1

dustypaws
dustypaws

Reputation: 301

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.

Upvotes: 15

automatix
automatix

Reputation: 14512

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();
}

Upvotes: 2

sabuz
sabuz

Reputation: 849

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);

Upvotes: 1

Kamal Maisuriya
Kamal Maisuriya

Reputation: 39

$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);

Upvotes: 2

Amir
Amir

Reputation: 8929

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

Upvotes: 8

user28864
user28864

Reputation: 3453

This worked for me in laravel 4.2

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

Upvotes: 20

jsdev
jsdev

Reputation: 672

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);
}

Upvotes: 17

Aamir
Aamir

Reputation: 2283

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

Upvotes: 87

Karthik
Karthik

Reputation: 5759

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

Upvotes: 0

PPL
PPL

Reputation: 6555

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.

Upvotes: 1

Md. Saidur Rahman Milon
Md. Saidur Rahman Milon

Reputation: 2911

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]']);

Upvotes: 1

Niklesh Raut
Niklesh Raut

Reputation: 34914

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

Upvotes: 15

temporary account
temporary account

Reputation: 17

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

Upvotes: 0

Dnyaneshwar Harer
Dnyaneshwar Harer

Reputation: 842

You can do this:

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

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

Upvotes: 4

Abhishek Goel
Abhishek Goel

Reputation: 19731

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

Upvotes: 4

HItesh Tank
HItesh Tank

Reputation: 686

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);
}

Upvotes: 3

Majbah Habib
Majbah Habib

Reputation: 8558

**** 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 ;

Upvotes: 55

bobbybackblech
bobbybackblech

Reputation: 1886

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);
}

Upvotes: 3

Tayyab Hussain
Tayyab Hussain

Reputation: 1838

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

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

Upvotes: 3

dave
dave

Reputation: 2298

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);
}

Upvotes: 74

Benubird
Benubird

Reputation: 19467

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();

Upvotes: 186

Related Questions