Получить последний идентификатор вставки - PullRequest
4 голосов
/ 25 октября 2010

Здравствуйте! Я использую cakePHP 1.3 и не могу получить идентификатор последней вставленной строки.Я на самом деле использую $ this-> Model-> id, чтобы получить последний вставленный идентификатор, но я не могу получить идентификатор.При попытке проверить, что является типом возврата, он говорит как bool (false), что означает, что ничего не возвращается.

Здесь я загружаю другую модель в другой контроллер, так что это будет проблема?Но даже при загрузке я ничего не получаю !!

$this->loadModel('Contact');
$this->Contact->query("insert into contacts(tblContact_firstName,tblContact_lastName,tblContact_company,tblContact_department,tblContact_address,tblContact_country,tblContact_city,tblContact_state,tblContact_zipcode,tblContact_phone1,tblContact_email1) values('$sanitizedFormData[fname]','$sanitizedFormData[lname]','','$sanitizedFormData[company]','$sanitizedFormData[address]','$sanitizedFormData[country]','$sanitizedFormData[city]','$sanitizedFormData[state]','$sanitizedFormData[zip]','$sanitizedFormData[phone]','$sanitizedFormData[email]');");

$this->loadModel('Contact');
$contactId = $this->Contact->id;

И когда я рекурсивно печатал массив $ this-> Contact, я обнаружил, что значение ключа "id" пусто.Так что это объясняет, почему я получал пустое значение.

Теперь, учитывая мою ситуацию, как мне получить последний вставленный идентификатор, специфичный для контакта контроллера?

Ответы [ 4 ]

8 голосов
/ 04 декабря 2010

Я думаю, вы просто хотите сделать:

$this->getLastInsertID();

http://book.cakephp.org/2.0/en/models/additional-methods-and-properties.html#model-getlastinsertid

4 голосов
/ 25 октября 2010

Когда вы используете query(), вы теряете много автоматических тортиков. Вместо этого используйте save().

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

Вы также можете избежать использования loadModel(), если ваша текущая модель как-то связана с Контактом ($this->CurrentModel->AnotherOne->Contact->save(...)).

4 голосов
/ 25 октября 2010

Если это MySQl, вы можете использовать запрос «SELECT from contacts LAST_INSERT_ID ()», чтобы получить последний идентификатор. или просто "SELECT LAST_INSERT_ID ()"

Для MSSQL это «SELECT @@ IDENTITY».

Это позволяет обойти любое решение в cakePHP, поэтому может быть и лучшее решение.

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

Вы можете получить last inserted record id по

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

Также вы можете использовать:

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

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

Примечание: Эта функция не работает, если вы выполняете запрос вставки вручную

...