如何获取CakePHP 3.0中的最后一个插入ID?
使用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工作。
感谢
终于找到了答案,如果别人跑进这个做:
$result=$this->ModelName->save($whatever);
$record_id=$result->id;
$result=$this->ModelName->find('all',['fields'='id'])->last();
$record_id=$result->id;
使用这种方法,如果另一个线程/进程/服务器/ etc同时插入,我们可能会得到错误的ID。 – 2016-09-11 00:02:10
这些工作实际ORM模型。
$result = $this->Model->save($data);
$id = $result->id;
到cakephp3.XI发现这一点:
if ($articlesTable->save($article)) {
// The $article entity contains the id now
$id = $article->id;
}
http://book.cakephp.org/3.0/en/orm/saving-data.html#inserting-data
这是我能得到这个正常工作的唯一方法:
$result=$this->ModelName->save($whatever);
$record_id=$result['id'];
在CakePHP 3.0
$statement = $query1->insert("columns of milestone");
$id = $statement->lastInsertId('Milestones'); //Here it will return the last insert id
个
注意里程碑是这应该做工精细表
的名字:我一直在挣扎与此相当长一段时间得到它的工作之前
$entity = $this->MyModel->newEntity($this->request->data())
$result= $this->MyModel->save($entity);
$id = $result->id;
。只要实体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
}
就可以解决这个问题,下面的方式。
对于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();
'$ insertedId = $ this-> ModelName-> id;'对于3.x是错误的。请更改 – 2017-09-10 03:43:47
@KimStacks此解决方案适用于我。 – Faisal 2017-09-10 07:46:08
这是这本书在这里:http://book.cakephp.org/3.0/ en/orm/saving-data.html#inserted-data – alecho 2015-05-30 18:26:26
对我来说: '$ record_id = $ result ['ModelName'] ['id']' – 2015-07-01 21:35:43
这当然最好。在if内部保存,在上面执行一行,然后得到if($ result) – mewc 2017-09-04 22:05:55