2014-09-24 110 views
13

使用CakePHP 3.0测试版,看起来像是一个简单的问题,但我搜索了文档并找不到任何东西。在使用$ this-> Model-> save()插入一条新记录后,我想要获取新创建记录的auto_increment主键ID。如何获取CakePHP 3.0中的最后一个插入ID?

蛋糕2.x中,我可以这样做:

$record_id=$this->ModelName->id; 

$record_id=$this->ModelName->getLastInsertID(); 

但是那些都似乎在CakePHP的3.0工作。

感谢

回答

26

终于找到了答案,如果别人跑进这个做:

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

这是这本书在这里:http://book.cakephp.org/3.0/ en/orm/saving-data.html#inserted-data – alecho 2015-05-30 18:26:26

+0

对我来说: '$ record_id = $ result ['ModelName'] ['id']' – 2015-07-01 21:35:43

+0

这当然最好。在if内部保存,在上面执行一行,然后得到if($ result) – mewc 2017-09-04 22:05:55

2
$result=$this->ModelName->find('all',['fields'='id'])->last(); 

$record_id=$result->id; 
+1

使用这种方法,如果另一个线程/进程/服务器/ etc同时插入,我们可能会得到错误的ID。 – 2016-09-11 00:02:10

1

这些工作实际ORM模型。

$result = $this->Model->save($data); 
$id = $result->id; 
-1

这是我能得到这个正常工作的唯一方法:

$result=$this->ModelName->save($whatever); 
$record_id=$result['id']; 
0

在CakePHP 3.0

$statement = $query1->insert("columns of milestone"); 
$id = $statement->lastInsertId('Milestones'); //Here it will return the last insert id 

注意里程碑是这应该做工精细表

-1

的名字:我一直在挣扎与此相当长一段时间得到它的工作之前

$entity = $this->MyModel->newEntity($this->request->data()) 
$result= $this->MyModel->save($entity); 
$id = $result->id; 
0

。只要实体ID尚未设置,save方法将使用最后一个插入ID更新实体。 如果要创建一个新的记录和实体ID设置为零保存方法不会更新,所以要确保实体ID没有设定

$table = TableRegistry::get('MyModel'); 
$record = $table->newEntity($data); 

// Unset the id if present and set to zero: 
if (isset($record->id) && ($record->id==0)){ 
    unset($record->id); 
} 

if ($saved = $table->save($record)){ 
    $id = $record->id; // get the last insert id 
} 
2

就可以解决这个问题,下面的方式。

对于CakePHP的3.x的

$result = $this->ModelName->save($this->request->data); 
$insertedId = $result->id; 

对于CakePHP的2.x的

$this->ModelName->save($this->request->data); 
$insertedId = $this->ModelName->getLastInsertId(); 
+0

'$ insertedId = $ this-> ModelName-> id;'对于3.x是错误的。请更改 – 2017-09-10 03:43:47

+0

@KimStacks此解决方案适用于我。 – Faisal 2017-09-10 07:46:08