CakePHP getLastInsertId()返回零

时间:2015-04-23 12:48:02

标签: 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,
  `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会自动增加,因为它应该是。

P.S。我刚刚插入了另一条记录,而且还有以下内容:

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)

Here's the saved data in phpMyAdmin

好的,现在我刚刚添加了一个名为' getMarketLastInsertId'市场模型,其中包含“country_code”字样。 (表中的唯一键)作为参数并返回最后一个id ... 感谢

3 个答案:

答案 0 :(得分:2)

在create table语句中显示了

`id` int(11) NOT NULL AUTO_INCREMENT, 

实际应该是

id

表示2 + 1 + 1/2 + 1/16 + ...为自动增量字段。所以我怀疑你对这个领域的主张是否充满了自动增量值。

答案 1 :(得分:1)

在CakePHP 3.X.X中你可以这样做

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

更一般

$result=$this->ModelName->save($whatever);
$record_id=$result->id;

了解更多信息

http://book.cakephp.org/3.0/en/orm/saving-data.html#a-glance-over-saving-data http://book.cakephp.org/3.0/en/orm/saving-data.html#saving-entities

答案 2 :(得分:0)

您没有正确设置主键。您应该将NOT NULL和AUTO_INCREMENT应用于您的id列,并将其定义为您的主键。