我目前正在使用以下代码在表格中插入数据:
<?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);
}
}
我想要返回插入的最后一个ID,但我不知道如何获取它。
亲切的问候!
答案 0 :(得分:315)
在save
之后,$data->id
应该是最后插入的ID。
return Response::json(array('success' => true, 'last_insert_id' => $data->id), 200);
有关更新的laravel版本,请尝试此
return response()->json(array('success' => true, 'last_insert_id' => $data->id), 200);
答案 1 :(得分:99)
xdazz是正确的,但为了将来可能正在使用DB::statement
或DB::insert
的访问者的利益,还有另一种方式:
DB::getPdo()->lastInsertId();
答案 2 :(得分:50)
对于那些也喜欢Jeffrey Way在他的Laracasts 5教程中使用Model::create()
的人来说,他只需将请求直接发送到数据库而无需在控制器中明确设置每个字段,并使用模型&#39; s $fillable
用于群发作业(非常重要,对于任何新用户和使用此方式):我使用insertGetId()
阅读了很多人,但不幸的是,这不尊重$fillable
白名单,所以你&#39 ;它会在尝试插入_token和数据库中没有任何字段的情况下出现错误,最终设置要过滤的内容等等。这让我感到很沮丧,因为我想使用质量分配和整体写入更少代码尽可能。幸运的是,Eloquent的create
method只包含了save方法(上面引用的@xdazz),所以你仍然可以提取最后创建的ID ...
public function store() {
$input = Request::all();
$id = Company::create($input)->id;
return redirect('company/'.$id);
}
答案 3 :(得分:36)
****对于Laravel ****
首先创建一个对象,然后为该对象设置属性值,然后保存对象记录,然后获取最后插入的id。比如
$user = new User();
$user->name = 'John';
$user->save();
//现在获取最后插入的ID
$insertedId = $user->id;
echo $insertedId ;
答案 4 :(得分:36)
如果表具有自动递增ID,请使用insertGetId方法插入记录,然后检索ID:
$id = DB::table('users')->insertGetId([
'email' => 'john@example.com',
'votes' => 0
]);
答案 5 :(得分:15)
在laravel 5中:你可以这样做:
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;
}
}
答案 6 :(得分:12)
这在laravel 4.2中对我有用。
$id = User::insertGetId([
'username' => Input::get('username'),
'password' => Hash::make('password'),
'active' => 0
]);
答案 7 :(得分:11)
以下是一个例子:
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);
}
答案 8 :(得分:9)
以下是我们如何在Laravel 4
中获取最后插入的IDpublic 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.');
}
答案 9 :(得分:8)
使用 if (!empty($save['samp_id'])){
$this->db->insert('tblsavesection', $save);
}
}
同时插入并插入insertGetId
来自doc
如果表具有自动递增ID,请使用insertGetId方法 插入记录然后检索ID:
按id
Model
按$id = Model::insertGetId(["name"=>"Niklesh","email"=>"myemail@gmail.com"]);
DB
答案 10 :(得分:4)
保存模型后,初始化的实例具有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
答案 11 :(得分:2)
您可以轻松获取最后插入的记录ID
$user = User::create($userData);
$lastId = $user->value('id');
从数据库中最后插入的记录中获取ID是一个很棒的技巧。
答案 12 :(得分:2)
对于insert()
Example:
$ data1 =数组( 'company_id'=> $ company_id, 'branch_id'=> $ branch_id );
$insert_id = CreditVoucher::insert($data1);
$id = DB::getPdo()->lastInsertId();
dd($id);
答案 13 :(得分:2)
有几种获取最后插入的ID的方法。全部取决于您在插入时使用的方法。根据您的情况,您可以像以下这样获得最后一个ID:
$data->save();
$data->id;
对于其他人,如果他们使用其他插入方法,则需要知道如何获得上一个插入的ID,方法如下:
使用create()
方法
$book = Book::create(['name'=>'Laravel Warrior']);
$lastId = $book->id;
使用insertGetId()
$id = DB::table('books')->insertGetId( ['name' => 'Laravel warrior'] ); $lastId = $id;
使用lastInsertId()
方法
$lastId = DB::getPdo()->lastInsertId();
参考https://easycodesolution.com/2020/08/22/last-inserted-id-in-laravel/
答案 14 :(得分:2)
$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);
答案 15 :(得分:2)
在
$data->save()
$data->id
将为您提供插入的ID
注意:如果您的自动增量列名称为 sno ,那么您应该使用
$data->sno
而非$data->id
答案 16 :(得分:2)
对于Laravel,如果插入新记录并调用$data->save()
,则此函数执行INSERT查询并返回主键值(默认情况下为 id )。
您可以使用以下代码:
if($data->save()) {
return Response::json(array('status' => 1, 'primary_id'=>$data->id), 200);
}
答案 17 :(得分:2)
在Laravel 5.2中,我会尽可能保持清洁:
public function saveContact(Request $request, Contact $contact)
{
$create = $contact->create($request->all());
return response()->json($create->id, 201);
}
答案 18 :(得分:2)
在保存数据库中的记录后,您可以$data->id
return Response::json(['success' => true, 'last_insert_id' => $data->id], 200)
答案 19 :(得分:1)
你可以这样做:
Route::get('/', 'HomeController@index')->name('dashboard');
Route::post('addbusiness',
['as' => 'addbusiness', 'uses' => 'PostsController@insert']);
答案 20 :(得分:1)
最短的方法可能是在模型上调用refresh()
:
public function create(array $data): MyModel
{
$myModel = new MyModel($dataArray);
$myModel->saveOrFail();
return $myModel->refresh();
}
答案 21 :(得分:0)
保存$data->save()
后。所有数据都在$data
内推送。由于这是一个对象,因此最近在$data
内保存了当前行。所以最后insertId
会在$data->id
内找到。
响应代码为:
return Response::json(array('success' => true, 'last_insert_id' => $data->id), 200);
答案 22 :(得分:0)
使用Eloquent模型
$user = new Report();
$user->email= 'johndoe@example.com';
$user->save();
$lastId = $user->id;
使用查询生成器
$lastId = DB::table('reports')->insertGetId(['email' => 'johndoe@example.com']);
答案 23 :(得分:0)
用于获取数据库中的最后一个插入ID 你可以使用
$data = new YourModelName;
$data->name = 'Some Value';
$data->email = 'abc@mail.com';
$data->save();
$lastInsertedId = $data->id;
这里$ lastInsertedId将为您提供最后一次插入的自动增量ID。
答案 24 :(得分:0)
尽管这个问题有些陈旧。我快速又肮脏的解决方案如下所示:
Public Class LoginForm
Private Retrys As Integer 'Integers automatically initialize to zero
Private Sub Ok_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Ok.Click
If Retrys = 2 Then
MessageBox.Show("Sorry, you have exceeded the maximum number of attempts to login")
Close()
End If
Dim AppLogin As New ApplicatioLogin
'Do your validation here; not in the Data Access code.
If Not String.IsNullOrWhiteSpace(un.Text) AndAlso Not String.IsNullOrWhiteSpace(pw.Text) Then
If AppLogin.Login(un.Text, pw.Text) Then
SensitiveDataForm.Load()
Close()
Else
Retrys += 1
MessageBox.Show("Login Failed")
End If
Else
MessageBox.Show("Please fill in both username and password")
End If
End Sub
End Class
Public Class ApplicatioLogin
Public Function Login(UserName As String, UserPassword As String) As Boolean
Dim recordCount As Integer
Using cn As New OleDb.OleDbConnection("Your connection string")
Using cmd As New OleDb.OleDbCommand("SELECT Count(*) FROM Users
WHERE UserName = @UserName AND UserPassword = @UserPassword", cn)
cmd.Parameters.Add("@UserName", OleDbType.VarChar).Value = UserName
cmd.Parameters.Add("@UserPassword", OleDbType.VarChar).Value = UserPassword
cn.Open()
recordCount = CInt(cmd.ExecuteScalar)
End Using
End Using
If recordCount = 1 Then
Return True
Else
Return False
End If
End Function
End Class
但是我想它很容易受到频繁访问的数据库上竞争条件的影响。
答案 25 :(得分:0)
可选方法将是:
$lastID = DB::table('EXAMPLE-TABLE')
->orderBy('id', 'desc')
->first();
$lastId = $lastProduct->id;
答案 26 :(得分:0)
您可以使用调用save方法的同一对象获取最后插入的ID;
$data->save();
$inserted_id = $data->id;
所以您可以简单地写:
if ($data->save()) {
return Response::json(array('success' => true,'inserted_id'=>$data->id), 200);
}
答案 27 :(得分:0)
这是对我有用的方法,family_id是我正在使用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);
}
还在扩展模型的模型族文件中,应将增量设置为true,否则上述$ family-> family_id将返回空
public $incrementing = true;
答案 28 :(得分:0)
您也可以这样尝试:
public function storeAndLastInrestedId() {
$data = new ModelName();
$data->title = $request->title;
$data->save();
$last_insert_id = $data->id;
return $last_insert_id;
}
答案 29 :(得分:-1)
要获取 Laravel 中的最后一个数据,您可以在查询中使用 first() 方法。
使用 Eloquent:
$company = Company::orderBy('id', 'DESC')->first();
使用查询:
$company = DB::table('company')->where('id', 'DESC')->first();
答案 30 :(得分:-1)
您可以使用$this
构造函数变量在当前函数或控制器中实现“使用Laravel Eloquent最后插入的ID”(不添加任何额外的列)。
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();
}
答案 31 :(得分:-1)
使用口才模式
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;
}
使用查询生成器
$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;
有关在Laravel中获取最后插入行ID的更多方法:http://phpnotebook.com/95-laravel/127-3-methods-to-get-last-inserted-row-id-in-laravel
答案 32 :(得分:-1)
// 1) **