Esto es interesante, también me encontré 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 entender mejor lo que hace getInsertID
, tenemos que echar un vistazo a la fuente:
Link 1: http://api20.cakephp.org/view_source/model#line-3375
public function getInsertID() {
return $this->_insertID
}
Sí, esa es la única pieza de 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()
al 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];
}
}
Original Source : Class Model
Si desea utilizar el ID de inserción en un método diferente, entonces tendrá que almacenarlo en algún lugar, es decir, una sesión o como una propiedad de clase en su controlador si una parte de la misma petición. –