macha
macha

Reputation: 7487

Get the last insert id

Hello I am using cakePHP 1.3 and I am unable to retreive the last inserted row's id. I actually am using $this->Model->id to retreive the last inserted id but I am unable to get the id. When tried to check what is return type, it says as bool(false), which means nothing is returned.

Here I am loading a different model in a different controller, so would that be the issue?? But even though I am loading, I get back nothing!!

$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;

And when I printed the $this->Contact array recursively, I found the value of "id" key empty. So that explains why I was receiving an empty value.

Now given my situation, how would I get the last inserted id, specific to the controller Contact?

Upvotes: 4

Views: 11859

Answers (4)

Waldo Bronchart
Waldo Bronchart

Reputation: 10532

I think you just want to do:

$this->getLastInsertID();

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

Upvotes: 8

Aditya P Bhatt
Aditya P Bhatt

Reputation: 22071

You can get last inserted record id by

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

Alternately, you can use:

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

This methods can be found in cake/libs/model/model.php on line 2775

Note: This function doesn't work if you run the insert query manually

Upvotes: 2

bancer
bancer

Reputation: 7525

When you use query() you loose a lot of automagic cakephp provides. Use save() instead.

In fact, you even do not need to load Contact in this case. You can execute any query from the current controller with query() even saving to any other table.

You can also avoid using loadModel() if your current model is somehow associated with Contact ($this->CurrentModel->AnotherOne->Contact->save(...)).

Upvotes: 4

David Mårtensson
David Mårtensson

Reputation: 7600

If this is MySQl you could use "SELECT from contacts LAST_INSERT_ID()" query to get last ID. or just "SELECT LAST_INSERT_ID()"

For MSSQL it is "SELECT @@IDENTITY".

This bypasses any solution in cakePHP though, so there might be a better solution.

Upvotes: 4

Related Questions