¿Cuál es el equivalente a getLastInsertId () en Cakephp?

Si getLastInsertId() inmediatamente después de save() , funciona, pero de lo contrario no funciona. Esto se demuestra en mi controlador:

 function designpage() { //to create a form Untitled $this->Form->saveField('name','Untitled Form'); echo $this->Form->getLastInsertId(); //here it works } function insertformname() { echo $this->Form->getLastInsertId(); //this doesnt echo at all } 

Sugiera una forma de obtener la funcionalidad que quiero.

CakePHP tiene dos métodos para obtener la última identificación insertada: Model::getLastInsertID() y Model::getInsertID() . En realidad, estos métodos son idénticos, por lo que realmente no importa qué método uses.

 echo $this->ModelName->getInsertID(); echo $this->ModelName->getLastInsertID(); 

Este método se puede encontrar en cake/libs/model/model.php en línea 2768

Solo usa:

 $this->Model->id; 

En Cake, la última identificación de inserción se guarda automáticamente en la propiedad id del modelo. Entonces, si acaba de insertar un usuario a través del modelo de usuario, se puede acceder a la última identificación de inserción a través de $ User-> id

id: valor de la ID de clave principal del registro al que este modelo apunta actualmente. Establecido automáticamente después de las inserciones de la base de datos.

Lea más acerca de las propiedades del modelo en los Documentos API de CakePHP: http://api.cakephp.org/2.5/class-AppModel.html

Editar: Me acabo de dar cuenta de que Model :: getLastInsertID () es esencialmente lo mismo que Model-> id

Después de mirar su código más de cerca, es difícil decir exactamente qué está haciendo con las diferentes funciones y dónde existen en el gran esquema de cosas. Esto en realidad puede ser más un problema de scope. ¿Estás intentando acceder al último id de inserción en dos solicitudes diferentes?

¿Puede explicar el flujo de su aplicación y cómo se relaciona con su problema?

Tendrá que hacer una inserción (o actualizar, creo) para que getLastInsertId() devuelva un valor. ¿Podrías pegar más código?

Si está llamando a esa función desde otra función de controlador, también podría usar $this->Form->id para obtener el valor que desea.

esta es la mejor manera de descubrir la última identificación insertada.

 $this->ModelName->getInsertID(); 

de otra manera está usando

 $this->ModelName->find('first',array('order'=>'id DESC')) 

Hay varios métodos para obtener la identificación de la clave principal por última vez al usar el método guardar

 $this->loadModel('Model'); $this->Model->save($this->data); 

Esto devolverá la última identificación insertada del modelo actual modelo

 $this->Model->getLastInsertId(); $this->Model-> getInsertID(); 

Esto devolverá la última identificación insertada del modelo con el nombre del modelo dado

 $this->Model->id; 

Esto devolverá la última identificación insertada del último modelo cargado

 $this->id; 

Intente utilizar este código en su clase de modelo (quizás en AppModel):

 function get_sql_insert_id() { $db =& ConnectionManager::getDataSource($this->useDbConfig); return $db->lastInsertId(); } 

Caveat Emptor: la función LAST_INSERT_ID () de MySql solo funciona en tablas con un campo AUTO_INCREMENT (de lo contrario, solo devuelve 0). Si su clave principal no tiene el atributo AUTO_INCREMENT, esa podría ser la causa de sus problemas.

Intenta usar este código. intente configurarlo en una variable para que pueda usarlo en otras funciones. 🙂

 $variable = $this->ModelName->getLastInsertId(); 

en PHP nativo, prueba esto.

 $variable = mysqli_insert_id(); 

Esto devolverá la última identificación insertada del último modelo cargado

 $this->id; 

Esto devolverá la última identificación insertada del modelo con el nombre del modelo dado

 $this->Model->id; 

Esto devolverá la última identificación insertada del modelo actual modelo

CakePHP tiene dos métodos para obtener la última identificación insertada: Model::getLastInsertID() y Model::getInsertID() .

 echo $this->ModelName->getInsertID(); echo $this->ModelName->getLastInsertID(); 

A continuación se encuentran las opciones:

 echo $this->Registration->id; echo $this->Registration->getInsertID(); echo $this->Registration->getLastInsertId(); 

Aquí puede reemplazar el Registration con el nombre de su modelo.

Gracias

Usa este

 function designpage() { //to create a form Untitled $this->Form->saveField('name','Untitled Form'); echo $this->Form->id; //here it works 

}

Puede obtener la última identificación insertada de muchas maneras. Como el nombre del modelo es Usuario, la mejor forma de recuperar la última ID insertada es

 $this->User->id; // For User Model 

También puede usar la función Modelo, pero a continuación el código devolverá la última identificación insertada del modelo con el nombre del modelo dado para este ejemplo, devolverá los datos del modelo de usuario.

 $this->User->getLastInsertId(); $this->User->getInsertID(); 

Cuando usa save() , la última ID de inserción se establece en la propiedad $id del modelo. Asi que:

 if ($this->Model->save()) { printf('Last insert ID was %s', $this->Model->id); } 

Cada vez que se invoca un método de salvar en un modelo, Cake llama internamente a Model :: getLastInsertId () y almacena el resultado en el ID de atributo de clase de modelo, por lo que después de llamar a save () no es necesario llamar a Model :: getLastInsertId () o inserId (), como ese valor se puede acceder directamente como este

 $id = $this->id;// within a model $id = $this->{$this->modelName}->id;// in a controller 

Después de la inserción de datos, podemos usar el siguiente código para obtener el ID del registro recientemente agregado:

  $last_insert_id=$this->Model->id; 

cada vez que realiza una operación de inserción en cualquier modelo, la torta internamente busca la última inserción Id y establece en el atributo Modelo-> id.

así que uno puede acceder directamente por $ Model-> id ;, no es necesario volver a consultar para lastInsertId.

Creo que funciona con getLastInsertId() si usa InnoDB Tables en su base de datos MySQL. También puede usar $this->Model->id

 $Machinedispatch = $this->Machinedispatch->find('first',array('order'=>array('Machinedispatch.id DESC'))); 

La forma más simple de encontrar la última fila insertada. Para mí getLastInsertId () esto no funciona.

En realidad, está utilizando getLastInsertId o getInsertId de una manera incorrecta. getLastInsertId () está destinado a funcionar solo después del método save (). Incluso no funcionará después de una inserción manual, ya que Cake Engine está almacenando mysql_insert_id en $ this -> _ insertID dentro del método save que puede recuperarse a través de getLastInsertId o getInsertId. Ahora en tu caso

 $this->Model->id 

O

 $this->Model->find('first',array('order'=>'id DESC')) 

Hará.

Esto es interesante, también tropecé con este problema. Lo que preguntaste quizás fue cómo obtener la última identificación de un determinado modelo, independientemente de su estado, ya sea que se haya insertado o no. Para comprender mejor lo que hace getInsertID , tenemos que echar un vistazo a la fuente:

Enlace 1: http://api20.cakephp.org/view_source/model#line-3375

 public function getInsertID() { return $this->_insertID } 

Sí, ese es el único código dentro de esa función. Significa que cakephp guarda en caché cualquier último ID insertado, en lugar de recuperarlo de la base de datos. Es por eso que no obtiene nada si usa esa función cuando no ha realizado ninguna creación de registro en el modelo.

Hice una pequeña función para obtener la última identificación de una determinada tabla, pero tenga en cuenta que esto no debe utilizarse como un reemplazo de getLastID() o getLastInsertID() , ya que tiene un propósito completamente diferente.

Agregue la función lastID() a AppModel como se muestra a continuación para que pueda usarse en todo el sistema. Tiene su límite, que no se puede usar en el modelo con clave primaria compuesta.

 class AppModel extends Model { public function lastID() { $data = $this->find('first', array( 'order' => array($this->primaryKey . ' DESC'), 'fields' => array($this->primaryKey) ) ); return $data[$this->name][$this->primaryKey]; } } 

Fuente original: Modelo de clase

En CakePHP puede obtenerlo de la siguiente manera: Modelo :: getInsertID () // Devuelve el ID del último registro insertado en este modelo. Model :: getLastInsertID () // Alias ​​a getInsertID ().

 $this->Model->field('id', null, 'id DESC')