Это интересно, я тоже наткнулся на эту проблему. Возможно, вы спросили, как получить последний идентификатор определенной модели независимо от ее состояния, была ли она только что вставлена или нет. Чтобы понять, что делает getInsertID
, нам нужно взглянуть на источник:
Ссылка 1: http://api20.cakephp.org/view_source/model#line-3375
public function getInsertID() {
return $this->_insertID
}
Да, это единственный фрагмент кода внутри этой функции. Это означает, что cakephp кэширует любой последний вставленный идентификатор, а не извлекает его из базы данных. Вот почему вы ничего не получите, если будете использовать эту функцию, когда вы не делали никаких записей в модели.
Я сделал небольшую функцию для получения последнего идентификатора определенной таблицы, но учтите, что его не следует использовать вместо getLastID()
или getLastInsertID()
, поскольку он имеет совершенно другое назначение.
Добавьте функцию lastID()
в AppModel, как показано ниже, чтобы ее можно было использовать в масштабе всей системы. У него есть свой предел, который нельзя использовать на модели с составным первичным ключом.
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];
}
}
Оригинальный источник: модель класса