Reputation: 7700
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Reputation: 17
public function store( UserStoreRequest $request ) {
$input = $request->all();
$user = User::create($input);
$userId=$user->id
}
Upvotes: 0
Reputation: 842
You can do this:
$result=app('db')->insert("INSERT INTO table...");
$lastInsertId=app('db')->getPdo()->lastInsertId();
Upvotes: 4
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
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
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
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
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
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