【问题标题】:Get the last insert id获取最后一个插入 id
【发布时间】:2011-04-30 06:11:26
【问题描述】:

您好,我正在使用 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,特定于控制器联系人?

【问题讨论】:

  • 这可能有一个蛋糕特定的功能,但mySQL有LAST_INSERT_ID()
  • 好吧,我实际上是在尝试避免另一个数据库调用。

标签: php cakephp cakephp-1.3


【解决方案1】:

【讨论】:

    【解决方案2】:

    当您使用query() 时,您会失去很多自动cakephp 提供的功能。请改用save()

    实际上,在这种情况下,您甚至不需要加载联系人。您可以使用 query() 从当前控制器执行任何查询,甚至可以保存到任何其他表。

    如果您当前的模型以某种方式与联系人 ($this->CurrentModel->AnotherOne->Contact->save(...)) 相关联,您也可以避免使用 loadModel()

    【讨论】:

    • 那么如果我使用save,那么我能检索到最后一个插入ID吗?
    • 我希望是的。至少我从来没有遇到过检索最后一个插入 id 的问题。也看看这里 - api13.cakephp.org/class/model#method-ModelgetLastInsertID.
    • @macha 是的,使用 save() 方法会自动设置模型的 ID。一般来说,尽量使用 Cake 内置函数;他们会自动为你做很多方便的事情(比如设置模型 ID)。
    • 另外,我怎么知道当前模型如何连接到另一个模型以及另一个模型如何连接到我的目标模型
    • 如果您在模型中定义了正确的关联,它们将通过我上面提到的方式调用它们来连接。
    【解决方案3】:

    如果这是 MySQl,您可以使用“SELECT from contacts LAST_INSERT_ID()”查询来获取最后一个 ID。 或者只是“SELECT LAST_INSERT_ID()”

    对于 MSSQL,它是“SELECT @@IDENTITY”。

    这绕过了 cakePHP 中的任何解决方案,因此可能会有更好的解决方案。

    【讨论】:

      【解决方案4】:

      您可以通过

      获取last inserted record id
      echo $this->ModelName->getLastInsertID();
      

      或者,您可以使用:

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

      这个方法可以在 cake/libs/model/model.php 的第 2775 行找到

      注意:如果您手动运行插入查询,此功能将不起作用

      【讨论】:

        猜你喜欢
        • 2023-03-16
        • 2011-06-01
        • 1970-01-01
        • 2011-05-07
        • 1970-01-01
        • 2016-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多