使用CakePHP 3.0测试版似乎是一个简单的问题,但我搜索了文档并找不到任何内容。在使用$ this-> Model-> save()插入新记录后,我想获取新创建记录的auto_increment主键ID。
使用Cake 2.x,我可以做到:
$record_id=$this->ModelName->id;
或
$record_id=$this->ModelName->getLastInsertID();
然而,这些似乎都不适用于CakePHP 3.0。
由于
答案 0 :(得分:29)
最后找到了答案,如果有人遇到这个问题:
$result=$this->ModelName->save($whatever);
$record_id=$result->id;
答案 1 :(得分:13)
到cakephp3.X我发现了这个:
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
答案 2 :(得分:3)
您可以按照以下方式解决此问题。
对于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();
答案 3 :(得分:2)
$result=$this->ModelName->find('all',['fields'='id'])->last();
$record_id=$result->id;
答案 4 :(得分:1)
这些适用于实际的ORM模型。
$result = $this->Model->save($data);
$id = $result->id;
答案 5 :(得分:1)
要获取新创建的注册cakePHP 3.x的标识符,这非常简单,只需检查该实体是否保存正确,否则您将无法访问该标识符。 代码很简单
$this->loadModel('ModelName');
$newEntity = $this->ModelName->newEntity();
因此,在加载模型并声明新记录后,可以在保存实体之前将值放在实体上。 例如,如果是发布请求,则可以执行以下操作:
要逐个字段继续操作
:$newEntity->name = $this->request->getData('name');
或(根据cakePHP版本,第一个示例来自最新版本)
$newEntity->name = $this->request->data('name');
否则,在全局范围内,在这种情况下,表单中字段的名称属性必须与数据库中实体的属性相同。
$newEntity = $this->ModalName->patchEntity($newEntity, $this->request->getData());
实体准备好后,如果它的标识符已在数据库中注册,您将只能访问它的标识符。
要获取最后一条记录的ID的解决方案,您必须执行以下操作:
if($this->ModalName->save($newEntity) {
//you can get ID here
$id = $newEntity->id;
}
我希望它会有用。
答案 6 :(得分:0)
在CakePHP 3.0中
$statement = $query1->insert("columns of milestone");
$id = $statement->lastInsertId('Milestones'); //Here it will return the last insert id
注意里程碑是表格的名称
答案 7 :(得分:0)
在开始工作之前,我已经挣扎了很长一段时间。只要尚未设置实体ID,save方法将使用最后一个插入ID更新实体。 如果您要创建新记录并且实体ID设置为零,则save方法不会更新它,因此请确保未设置实体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
}
答案 8 :(得分:-1)
这是我能够正常工作的唯一方法:
$result=$this->ModelName->save($whatever);
$record_id=$result['id'];
答案 9 :(得分:-1)
这应该可以正常工作:
CATransaction.begin()
CATransaction.animationDuration = 2.0;
theView.layer.contents = theNewImage.CGImage
CATransaction.commit();