Obtener el Último Id Insertado Usando Laravel Elocuente

Actualmente estoy usando el siguiente código para insertar datos en una tabla:

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

Quiero devolver el último ID insertado, pero no sé cómo conseguirlo.

Saludos!

InformationsquelleAutor SoldierCorp | 2014-01-13

28 Kommentare

  1. 345

    Después de save, $data->id debe ser el último id insertado.

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

    Para actualizar la versión de laravel probar este

    return response()->json(array('success' => true, 'last_insert_id' => $data->id), 200);
    • Un objeto siempre devuelve un objeto, ofc. Este es el único camino a seguir.
    • Ten en cuenta que si el id NO es autoincrement, este siempre va a volver 0. En mi caso el id era una cadena (UUID) y para este trabajo, he tenido que añadir public $incrementing = false; en mi modelo.
    • He MySQL gatillo que generan el uuid de un campo personalizado denominado aid y he puesto $incrementing = false; pero no Se volvió demasiado!
    • si bien es cierto, por favor, ¿puede indicar la sección de la Laravel doc donde se obtuvo esta información tan importante?
    • Esto es lo que yo había encontrado en mi aplicación que utiliza Laravel 5.4.
  2. 115

    xdazz que es correcto en este caso, sino para el beneficio de los futuros visitantes que pueden usar DB::statement o DB::insert, hay otra manera:

    DB::getPdo()->lastInsertId();
    • En realidad, puede hacerlo a la derecha en la inserción $id = DB::table('someTable')->insertGetId( ['field' => Input['data']);
    • haciendo de esta manera no tendrá la actualización de las marcas de tiempo en la DB
    • si desea actualizar timestamps utilizando insertGetId, amablemente visite aquí
    • Exactamente lo que yo estaba buscando el otro día! También, insertGetId sólo funciona si el id de columnas se llama en realidad «id».
    • Tengo mi solución en función de su respuesta.
  3. 55

    Para cualquier persona que le gusta también cómo Jeffrey Way utiliza Model::create() en su Laracasts 5 tutoriales, donde sólo se envía la Solicitud directamente a la base de datos sin establecer explícitamente cada campo en el controlador, y utilizando el modelo del $fillable para la masa de la asignación (muy importante, para cualquier persona nueva y usando de esta manera): he leído un montón de personas que utilizan insertGetId() pero por desgracia esto no respetar la $fillable lista blanca de manera que obtendrá errores con ella, tratando de insertar _token y cualquier cosa que no sea un campo en la base de datos, terminar de preparar las cosas que desea filtrar, etc. Que bummed de mí, porque quiero utilizar la masa de asignación y, en general escribir menos código cuando sea posible. Afortunadamente Elocuente del crear método sólo envuelve el método save (lo @xdazz citado anteriormente), por lo que aún puede tirar el último ID creado…

    public function store() {
    
        $input = Request::all();
        $id = Company::create($input)->id;
    
        return redirect('company/'.$id);
    }
    • Este ejemplo no funciona para mí en 5.1, pero este hizo: $new = Company::create($input); return redirect('company/'.$new->id);
    • Esto supone que la solicitud de los campos de nombre son la misma como sus respectivas columnas de base de datos. Que no es siempre el caso ( códigos, por ejemplo)..
  4. 43

    Si la tabla tiene un incremento automático de identificación, el uso de la insertGetId método para insertar un registro y, a continuación, recuperar el ID:

    $id = DB::table('users')->insertGetId([
        'email' => '[email protected]',
        'votes' => 0
    ]);

    Consulte: https://laravel.com/docs/5.1/queries#inserts

    • Lo que usted describe se parece a la captura de la última instrucción insert con Fluidez. La pregunta era sobre Elocuente. Se vería más como: $id = Modelo::create(‘votos’ => 0])->id; Como se describe en esta respuesta anterior: stackoverflow.com/a/21084888/436443
  5. 42

    **** Para Laravel ****

    En primer lugar crear un objeto, a Continuación, establezca los atributos de valor para ese objeto, a Continuación, guardar el registro de objeto y, a continuación, obtener el ultimo id insertado. como

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

    //Ahora para Conseguir El Último id insertado

    $insertedId = $user->id;
    
    echo $insertedId ;
  6. 16

    En laravel 5: usted puede hacer esto:

    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;
        }
    }
  7. 14

    Esto funcionó para mí en laravel 4.2

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

    He aquí un ejemplo:

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

    Aquí es cómo podemos obtener el último id insertado en 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.');
        }
  10. 10

    Uso insertGetId para insertar y obtener insertar id al mismo tiempo

    De doc

    Si la tabla tiene un incremento automático de identificación, utilice el método insertGetId
    para insertar un registro y, a continuación, recuperar el ID:

    Por Model

    $id = Model::insertGetId(["name"=>"Niklesh","email"=>"[email protected]"]);

    Por DB

    $id = DB::table('users')->insertGetId(["name"=>"Niklesh","email"=>"[email protected]"]);

    Para más detalles : https://laravel.com/docs/5.5/queries#inserts

  11. 6

    Después de guardar el modelo, la inicializa la instancia de la 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
  12. 4

    Para insertar()

    Example:

    $datos1 = array(
    ‘company_id’ => $company_id,
    ‘branch_id’ => $branch_id
    );

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

    En Laravel 5.2 yo haría tan limpia como sea posible:

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

    Después de

    $data->save()

    $data->id le dará el id insertado,

    Nota: Si su autoincrement nombre de la columna es sno entonces usted debe utilizar
    $data->sno y no $data->id

  15. 2

    Después de ahorro un registro en la base de datos, puede acceder a id por $data->id

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

    Para Laravel, Si inserta un nuevo registro y llame a $data->save() esta función ejecuta una consulta de INSERCIÓN y devuelve el valor de la clave principal (es decir, id por defecto).

    Puede utilizar el siguiente código:

    if($data->save()) {
        return Response::json(array('status' => 1, 'primary_id'=>$data->id), 200);
    }
  17. 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);
  18. 1

    Para obtener el último id insertado en la base de datos
    Usted puede utilizar

    $data = new YourModelName;
    $data->name = 'Some Value';
    $data->email = '[email protected]';
    $data->save();
    $lastInsertedId = $data->id;

    aquí $lastInsertedId se le da el último insertado incremento automático de identificación.

  19. 1

    El camino más corto es, probablemente, una llamada de la refresh() en el modelo:

    public function create(array $data): MyModel
    {
        $myModel = new MyModel($dataArray);
        $myModel->saveOrFail();
        return $myModel->refresh();
    }
  20. 0

    Después De Guardar $data->save(). todos los datos se insertan en $data. Como este es un objeto y la fila actual es simplemente guardado en el interior de $data. así, el pasado insertId se encuentra en el interior de $data->id.

    Código de respuesta será:

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

    Aunque esta pregunta es un poco de fecha. Mi rápido y sucio solución tendría este aspecto:

    $last_entry = Model::latest()->first();

    Pero supongo que es vulnerable a las condiciones de carrera en muy frecuentado bases de datos.

  22. 0

    Usted puede obtener el último id insertado con el mismo objeto que llama a guardar método;

    $data->save();
    $inserted_id = $data->id;

    Así que usted puede simplemente escribir:

    if ($data->save()) {
        return Response::json(array('success' => true,'inserted_id'=>$data->id), 200);
    }
  23. -1
    public function store( UserStoreRequest $request ) {
        $input = $request->all();
        $user = User::create($input);
        $userId=$user->id 
    }
    • Este post fue respondida hace 3 años. Por favor, edita tu respuesta para agregar un poco más de explicación en cuanto a por qué podría ayudar a que el usuario o la forma de su ayuda resuelve el OP pregunta de una mejor manera.
    • Gracias por este fragmento de código, que pueden proporcionar cierta ayuda inmediata. Una explicación adecuada , mejoraría mucho su valor educativo que muestra por qué es una buena solución para el problema y que sea más útil para los lectores futuros similares, pero no idénticas a las preguntas. Por favor, edita tu respuesta para agregar explicación, y da una indicación de lo que las limitaciones y supuestos que se aplican. Por no hablar de la edad de la pregunta y la baja calidad de su respuesta.
  24. -1

    Utilizando Elocuente Modelo

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

    Utilizando El Generador De Consultas

    $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;

    Para más métodos para obtener el Último Insertado identificador de Fila en Laravel : http://phpnotebook.com/95-laravel/127-3-methods-to-get-last-inserted-row-id-in-laravel

  25. -1

    Puede utilizar $this constructor variable para lograr «el Último Id Insertado Usando Laravel Elocuente» (sin la adición de cualquier columna adicional) en función actual o el controlador.

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

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea