CakePHP getLastInsertId()返回零

CakePHP getLastInsertId()返回零,php,mysql,cakephp,cakephp-2.5,Php,Mysql,Cakephp,Cakephp 2.5,我是CakePHP新手,在获取最后插入的id时遇到问题。我的模式如下: CREATE TABLE IF NOT EXISTS `markets` ( `id` int(11) NOT NULL, `name` varchar(20) NOT NULL, `region_code` varchar(5) NOT NULL, `country_code` varchar(255) NOT NULL, `language` varchar(255) NOT NULL, `def

我是CakePHP新手,在获取最后插入的id时遇到问题。我的模式如下:

CREATE TABLE IF NOT EXISTS `markets` (
  `id` int(11) NOT NULL,
  `name` varchar(20) NOT NULL,
  `region_code` varchar(5) NOT NULL,
  `country_code` varchar(255) NOT NULL,
  `language` varchar(255) NOT NULL,
  `default_language` varchar(10) NOT NULL,
  `created` datetime NOT NULL,
  `modified` datetime NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

ALTER TABLE `markets`
   ADD PRIMARY KEY (`id`),
   ADD UNIQUE KEY `region_code` (`region_code`),
   ADD KEY `locale` (`country_code`),
   ADD KEY `language` (`language`);

ALTER TABLE `markets`
   MODIFY `id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=8;
这就是我的逻辑:

$this->loadModel('Market');
if( isset($this->request->data['Market']) ) {
  $this->Market->set($this->request->data);
  if( $this->Market->validates() ) {
    $this->Market->save($this->request->data);
    echo $this->Market->id; //displays zero
    echo $this->Market->getLastInsertID(); //also displays zero
  }
}
不过,在MySQL中,这一切看起来都很好,因为id会像预期的那样自动递增

另外,我刚刚插入了另一条记录,下面是返回的内容:

array (size=1)
  'Market' => 
    array (size=8)
      'name' => string 'Japan' (length=5)
      'region_code' => string 'JP' (length=2)
      'country_code' => string 'JP' (length=2)
      'language' => string 'ja_JP' (length=5)
      'default_language' => string 'ja_JP' (length=5)
      'modified' => string '2015-04-23 09:11:34' (length=19)
      'created' => string '2015-04-23 09:11:34' (length=19)
      'id' => string '0' (length=1)

好的,现在我刚刚在Market模型中添加了一个名为“getMarketLastInsertId”的函数,它将“country_code”(表中的唯一键)作为参数,并返回最后一个id。。。
谢谢

在CakePHP 3.X.X中,您可以这样做

$result = $this->Market->save($this->request->data);
$record_id=$result->id;
更一般

$result=$this->ModelName->save($whatever);
$record_id=$result->id;
更多信息


在您显示的CREATETABLE语句中

`id` int(11) NOT NULL, 
实际上应该是

`id` int(11) NOT NULL AUTO_INCREMENT, 

使
id
成为自动递增字段。因此,我怀疑您关于字段被自动增量值填充的说法。

您没有正确设置主键。您不应该为NULL,并且自动增量应用于您的id列,并将其定义为主键。

您可以尝试$this->ModelName->getInsertID()$此->市场->getInsertId();返回零。是否正确构造了要保存到数据库的数组?您没有检查保存是否成功完成$result=$this->Market->save($this->request->data)$记录\u id=$result->id;您确定要将任何内容保存到数据库中吗?为什么不做if($this->Market->save($this->request->data)){//print stuff}不幸的是,这不是3.0。是2.5。4@petermk我已经粘贴了官方3.0指南中的链接。希望您能帮我,我已经使用MySQL超过10年了,并且知道如何使用phpMyAdmin。这些值正在保存并自动递增。谢谢。@petermk即使是有经验的用户也会犯错误。ADmad是正确的,此架构不会自动递增。请看这里的证据:上面的模式是一个phpmyadmin导出,我忘了在导出文件的底部包含ALTERTABLE语句。很抱歉。超过10年的经验仍然不能防止简单的人为错误;)数据库正常工作,所以我没有出错。您忽略了以下内容:ALTER TABLE
markets
MODIFY
id
int(11)NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=8;