您好我正在使用cakePHP 1.3,我无法检索最后插入的行的ID。我实际上使用$ this-> Model-> id来检索最后插入的ID,但我无法获取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”键的值为空。这就解释了为什么我收到一个空值。
现在根据我的情况,我如何得到最后插入的id,特定于控制器Contact?
答案 0 :(得分:8)
我想你只想这样做:
$this->getLastInsertID();
http://book.cakephp.org/2.0/en/models/additional-methods-and-properties.html#model-getlastinsertid
答案 1 :(得分:4)
如果这是MySQl,您可以使用“从联系人LAST_INSERT_ID()中查询”查询来获取最后一个ID。 或者只是“SELECT LAST_INSERT_ID()”
对于MSSQL,它是“SELECT @@ IDENTITY”。
这绕过了cakePHP中的任何解决方案,因此可能有更好的解决方案。
答案 2 :(得分:4)
当你使用query()
时,你会失去很多自动蛋糕提供的功能。请改用save()
。
事实上,在这种情况下,您甚至不需要加载联系人。您可以使用query()
从当前控制器执行任何查询,甚至可以保存到任何其他表。
如果您当前的模型与联系人(loadModel()
)有某种关联,您也可以避免使用$this->CurrentModel->AnotherOne->Contact->save(...)
。
答案 3 :(得分:2)
您可以通过
获取last inserted record id
echo $this->ModelName->getLastInsertID();
或者,您可以使用:
echo $this->ModelName->getInsertID();
此方法可在第2775行的cake / libs / model / model.php中找到
注意:如果您手动运行插入查询,则此功能不起作用