Что эквивалентно 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 ]

3 голосов
/ 02 сентября 2013

Вы можете получить последний вставленный идентификатор разными способами. Как и название модели - Пользователь, так что лучший способ получить последний вставленный идентификатор -

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

Вы также можете использовать функцию Модель, но приведенный ниже код вернет последний вставленный идентификатор модели с данным именем модели, для этого примера он вернет данные модели пользователя

$this->User->getLastInsertId();
$this->User->getInsertID();
3 голосов
/ 23 октября 2013

Каждый раз, когда для модели вызывается метод save, торт внутренне вызывает Model :: getLastInsertId () и сохраняет результат в идентификаторе атрибута класса модели, поэтому после вызова save () нет необходимости вызывать Model :: getLastInsertId ( ) или insertId (), так как к значению можно получить прямой доступ, например:

$id = $this->id;// within a model
$id = $this->{$this->modelName}->id;// in a controller
3 голосов
/ 27 сентября 2013

Когда вы используете save(), для идентификатора последней вставки устанавливается свойство $id модели. Итак:

if ($this->Model->save()) {
    printf('Last insert ID was %s', $this->Model->id);
}
3 голосов
/ 23 мая 2013

Используйте это

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

}

2 голосов
/ 24 июля 2014

Я думаю, что это работает с getLastInsertId(), если вы используете таблицы InnoDB в вашей базе данных MySQL. Вы также можете использовать $this->Model->id

2 голосов
/ 27 сентября 2013

каждый раз, когда вы выполняете операцию вставки для любой модели, внутренне извлекайте последний идентификатор вставки и задаете атрибут Model-> id.

так что можно получить к нему доступ напрямую через $ Model-> id ;, нет необходимости снова запрашивать lastInsertId.

2 голосов
/ 20 июня 2013

После вставки данных мы можем использовать следующий код для получения идентификатора недавно добавленной записи:

    $last_insert_id=$this->Model->id;
1 голос
/ 07 марта 2014

В CakePHP вы можете получить его: Model :: getInsertID () // Возвращает идентификатор последней записи, вставленной этой моделью. Model :: getLastInsertID () // Псевдоним для getInsertID ().

1 голос
/ 09 января 2014

На самом деле вы используете getLastInsertId или getInsertId неправильно. getLastInsertId () предназначен для работы только после метода save (). Это даже не будет работать после ручной вставки, так как движок торт хранит mysql_insert_id в $ this -> _ insertID внутри метода save, который можно получить через getLastInsertId или getInsertId. Теперь в вашем случае

$this->Model->id

OR

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

Подойдет.

1 голос
/ 15 июля 2011
$Machinedispatch = 
   $this->Machinedispatch->find('first',array('order'=>array('Machinedispatch.id DESC')));

Самый простой способ найти последнюю вставленную строку. Для меня getLastInsertId () это не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...