Что эквивалентно getLastInsertId () в Cakephp? - PullRequest
50 голосов
/ 11 июня 2009

Если я сделаю getLastInsertId() сразу после save(), это будет работать, но в противном случае это не так. Это продемонстрировано в моем контроллере:

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
}

Пожалуйста, предложите способ получить желаемую функциональность.

Ответы [ 22 ]

1 голос
/ 23 декабря 2012

Это интересно, я тоже наткнулся на эту проблему. Возможно, вы спросили, как получить последний идентификатор определенной модели независимо от ее состояния, была ли она только что вставлена ​​или нет. Чтобы понять, что делает 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];
  }
}

Оригинальный источник: модель класса

0 голосов
/ 24 августа 2010
$this->Model->field('id', null, 'id DESC')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...