CakePHP: безопасен ли метод getLastInsertId - PullRequest
4 голосов
/ 28 июня 2011

Если я сохраняю модель, getLastInsertId() возвращает последний идентификатор вставки или он возвращает идентификатор из только что сохраненной строки. Другими словами, если я сделаю это:

$this->Model->save($this->data);
__thisFunctionTakesAVeryLongTimeToExecute();
$insertId = $this->Model->getLastInsertId();

Возвращает ли getLastInsertId() идентификатор из данных, которые я сохранил 2 строчками выше. Или он возвращает последний созданный идентификатор?

Ответы [ 3 ]

3 голосов
/ 28 июня 2011

не уверен насчет lastInsertId, но ... почему вы не используете $this->Model->id вместо ??после сохранения информации последний вставленный идентификатор сохраняется там

2 голосов
/ 28 июня 2011

Я использую Model::getLastInsertID() все время так же, как вы пытаетесь использовать его, и у вас не было проблем. $this->Model->id по сути делает то же самое сразу после сохранения.

Но имейте в виду, что $this->Model->id доступен для записи (т.е. $this->Model->id = <some_number>) и не всегда представляет идентификатор записи, которую вы только что вставили. Принимая во внимание, что Model::getLastInsertID() делает.

1 голос
/ 02 июля 2013

Model::getLastInsertID извлекает последний вставленный идентификатор из текущего соединения. Так что это безопасно, пока вы не вставляете из того же соединения.

Чтобы было немного яснее, я думаю, вам нужно подумать, как спровоцировать эту ошибку, потому что это не так просто. Два разных браузера на одном компьютере будут использовать разные соединения. Я не уверен, что должно происходить в одном браузере с разными вкладками. Как уже говорил другой, у меня никогда не было этой проблемы.

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

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