你如何获得CakePHP 3.0中的最后一个插入ID?

时间:2014-09-24 21:57:25

标签: cakephp cakephp-3.0

使用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。

由于

10 个答案:

答案 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();