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

96 голосов
/ 08 апреля 2011

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

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

Этот метод можно найти в cake/libs/model/model.php в строке 2768

29 голосов
/ 02 сентября 2010

Просто используйте:

$this->Model->id;
20 голосов
/ 11 июня 2009

В Cake последний идентификатор вставки автоматически сохраняется в свойстве id модели. Так что, если вы просто вставили пользователя через модель User, последний идентификатор вставки может быть доступен через $ User-> id

id - Значение идентификатора первичного ключа запись о том, что эта модель в настоящее время указывает на. Автоматически устанавливается после вставки базы данных.

Подробнее о свойствах модели в Документах CakePHP API: http://api.cakephp.org/2.5/class-AppModel.html

Edit: я только что понял, что Model :: getLastInsertID () по сути то же самое, что Model-> id

После более внимательного изучения вашего кода трудно сказать точно, что вы делаете с различными функциями и где они существуют в общей схеме вещей. На самом деле это может быть больше проблемой. Вы пытаетесь получить доступ к последнему идентификатору вставки в двух разных запросах?

Можете ли вы объяснить, как проходит ваше приложение и как оно связано с вашей проблемой?

9 голосов
/ 13 декабря 2013

это лучший способ узнать последний вставленный идентификатор.

$this->ModelName->getInsertID();

другой способ использует

$this->ModelName->find('first',array('order'=>'id DESC')) 
9 голосов
/ 11 июня 2009

Вам нужно будет вставить (или обновить, я полагаю), чтобы getLastInsertId() вернул значение. Не могли бы вы вставить больше кода?

Если вы вызываете эту функцию из другой функции контроллера, вы также можете использовать $this->Form->id для получения нужного значения.

8 голосов
/ 13 июня 2012

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

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

Возвращает последний вставленный идентификатор текущей модели модели

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

Это вернет последний вставленный идентификатор модели с данным названием модели

$this->Model->id;

Возвращает последний вставленный идентификатор последней загруженной модели

$this->id;
6 голосов
/ 03 сентября 2010

Попробуйте использовать этот код в своем классе модели (возможно, в AppModel):

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

Caveat emptor: функция MySql LAST_INSERT_ID () работает только для таблиц с полем AUTO_INCREMENT (в противном случае возвращается только 0). Если ваш первичный ключ не имеет атрибута AUTO_INCREMENT, это может быть причиной ваших проблем.

6 голосов
/ 09 октября 2014

Попробуйте использовать этот код. попробуйте установить его в переменную, чтобы вы могли использовать его в других функциях. :)

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

на нативном PHP, попробуйте это.

$variable = mysqli_insert_id();
4 голосов
/ 31 января 2016

Ниже приведены варианты:

echo $this->Registration->id;

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

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

Здесь вы можете заменить Registration названием вашей модели.

Спасибо

4 голосов
/ 04 марта 2014

Возвращает последний вставленный идентификатор последней загруженной модели

$this->id;

Это вернет последний вставленный идентификатор модели с данным названием модели

$this->Model->id;

Возвращает последний вставленный идентификатор текущей модели модели

CakePHP имеет два метода для получения последнего вставленного идентификатора: Model::getLastInsertID() и Model::getInsertID().

echo $this->ModelName->getInsertID();
echo $this->ModelName->getLastInsertID();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...