Laravel,使用雄辩得到最后插入id

我目前正在使用这个代码在表中插入数据:

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("Ymd H:i:s"); $data->fecha_modificacion = date("Ymd H:i:s"); if($data->save()) { return Response::json(array('success' => true), 200); } } 

我想返回最后一个ID插入,但我不知道如何得到它。

亲切的问候!

save$data->id应该是插入的最后一个id。

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

在这种情况下, xdazz是正确的,但是为了将来的访问者可能使用DB::statement或者DB::insert ,还有另一种方法:

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

对于那些也喜欢Jeffrey Way如何在他的Laracasts 5教程中使用Model::create() ,他只是直接将请求直接发送到数据库中,而没有明确地设置控制器中的每个字段,并使用模型的$fillable进行批量赋值非常重要的,对于任何新的和使用这种方式):我读了很多人使用insertGetId()但不幸的是这不尊重$fillable白名单,所以你会得到错误,试图插入_token和任何不是数据库中的一个字段,最终设置你想要过滤的东西,等等。这让我感到困惑,因为我希望使用质量分配,并尽可能less地写代码。 幸运的是,Eloquent的create方法只是包装了保存方法(上面引用的是@xdazz),所以你仍然可以取出最后创build的ID …

 public function store() { $input = Request::all(); $id = Company::create($input)->id; return redirect('company/'.$id); } 

如果表具有自动递增的ID,请使用insertGetId方法插入logging,然后检索ID:

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

请参阅: https : //laravel.com/docs/5.1/queries#inserts

****对于Laravel ****

首先创build一个对象,然后为该对象设置属性值,然后保存对象logging,然后得到最后插入的id。 如

 $user = new User(); $user->name = 'John'; $user->save(); 

//现在获取最后插入的ID

 $insertedId = $user->id; echo $insertedId ; 

以下是我们如何在Laravel 4中获得最后插入的ID

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

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

这里是一个例子

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

这在laravel 4.2中适用于我

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

在数据库中保存logging后,可以通过$data->id访问$data->id

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

在保存模型之后,初始化的实例具有该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 

在Laravel 5.2中,我会尽可能地变得干净:

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

 $data->save() 

$data->id会给你插入的id,

注意:如果你的autoincrement列名是sno,那么你应该使用$data->sno而不是$data->id

对于Laravel,如果插入新logging并调用$data->save()此函数将执行INSERT查询并返回主键值(即默认为id )。

你可以使用下面的代码:

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

保存$ data-> save()后。 所有的数据被推入$ data中。 由于这是一个对象,当前行只是最近保存在$ data中。 所以最后insertId将被发现内$ data-> id.So Resospnse代码将…

 return Response::json(array('success' => true, 'last_insert_id' => $data->id), 200); 
 public function store( UserStoreRequest $request ) { $input = $request->all(); $user = User::create($input); $userId=$user->id } 

使用insertGetId同时插入并获取插入的id

从doc

如果表具有自动递增的ID,请使用insertGetId方法插入logging,然后检索ID:

Model

 $id = Model::insertGetId(["name"=>"Niklesh","email"=>"myemail@gmail.com"]); 

DB

 $id = DB::table('users')->insertGetId(["name"=>"Niklesh","email"=>"myemail@gmail.com"]); 

有关更多详细信息: https : //laravel.com/docs/5.5/queries#inserts

使用雄辩模型

 $user = new Report(); $user->email= 'johndoe@example.com'; $user->save(); $lastId = $user->id; 

使用查询生成器

 $lastId = DB::table('reports')->insertGetId(['email' => 'johndoe@example.com']); 

你可以这样做:

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