首页 文章

使用Laravel Eloquent获取最后插入的ID

提问于
浏览
208

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

<?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,但我不知道如何获取它 .

亲切的问候!

24 回答

  • 0
    $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);
    
  • 30

    saving 数据库中记录后,您可以通过 $data->id 访问 id

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

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

    您可以使用以下代码:

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

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

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

    对于那些也喜欢Jeffrey Way在他的Laracasts 5教程中使用 Model::create() 的人来说,他只需将Request直接发送到数据库而无需在控制器中明确设置每个字段,并使用模型的 $fillable 进行质量分配(非常重要,对于任何新人来说)并且使用这种方式):我读了很多人使用 insertGetId() 但不幸的是,这不尊重 $fillable 白名单所以你在数据库中的字段,最终设置你要过滤的东西等等 . 这让我很失望,因为我想要尽可能使用质量分配和整体编写更少的代码 . 幸运的是Eloquent的create method只是包装了save方法(上面引用了@xdazz),所以你仍然可以拉出最后创建的ID ...

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

    Using Eloquent Model

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

    Using Query Builder

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

    这是一个例子:

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

    对于在数据库中获取最后插入的ID您可以使用

    $data = new YourModelName;
    $data->name = 'Some Value';
    $data->email = 'abc@mail.com';
    $data->save();
    $lastInsertedId = $data->id;
    

    这里$ lastInsertedId将为您提供最后插入的自动增量ID .

  • 2

    $data->save()
    

    $data->id 将为您提供插入的ID,

    Note: 如果您的自动增量列名称为 sno ,则应使用 $data->sno 而不是 $data->id

  • 2

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

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

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

  • 7

    你可以这样做:

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

    最短的方法可能是模型上的refresh()的调用:

    public function create(array $data): MyModel
    {
        $myModel = new MyModel($dataArray);
        $myModel->saveOrFail();
        return $myModel->refresh();
    }
    
  • 9
    public function store( UserStoreRequest $request ) {
        $input = $request->all();
        $user = User::create($input);
        $userId=$user->id 
    }
    
  • 10

    使用 insertGetId 同时插入并插入 id

    doc

    如果表具有自动递增ID,请使用insertGetId方法插入记录,然后检索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

  • 3

    这在laravel 4.2中对我有用

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

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

    ****对于Laravel ****

    首先创建一个对象,然后为该对象设置属性值,然后保存对象记录,然后获取最后插入的id . 如

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

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

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

    Here is how we can get last inserted id in Laravel 4

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

    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;
    

    有关在Laravel中获取上次插入行ID的更多方法:http://phpnotebook.com/95-laravel/127-3-methods-to-get-last-inserted-row-id-in-laravel

  • -1

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

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

    在Laravel 5.2中,我会尽可能地保持清洁:

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

    保存后 $data->save() . 所有数据都在 $data 内推送 . 由于这是一个对象,当前行最近刚刚保存在 $data 内 . 所以最后 insertId 将在 $data->id 内找到 .

    响应代码将是:

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

    对于插入()

    Example:
    

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

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

相关问题