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