22

使用 CakePHP 3.0 beta 似乎是一个简单的问题,但我搜索了文档并找不到任何东西。使用 $this->Model->save() 插入新记录后,我想获取新创建记录的 auto_increment 主键 ID。

使用 Cake 2.x,我可以:

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

或者

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

然而,这些似乎都不适用于 CakePHP 3.0。

谢谢

4

10 回答 10

32

终于找到了答案,如果有人遇到这个问题:

$result=$this->ModelName->save($whatever);
$record_id=$result->id;
于 2014-09-24T22:32:29.797 回答
14

到 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

于 2015-10-10T16:57:56.003 回答
7

您可以通过以下方式解决此问题。

对于 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();
于 2017-02-28T10:19:59.460 回答
2

要获取新创建的注册 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;
}

我希望它会有用。

于 2019-01-07T20:56:38.610 回答
1
$result=$this->ModelName->find('all',['fields'='id'])->last();

$record_id=$result->id;
于 2015-06-08T07:44:05.163 回答
1

这些适用于实际的 ORM 模型。

$result = $this->Model->save($data);
$id = $result->id;
于 2015-06-08T20:41:31.707 回答
0

在 CakePHP 3.0 中

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

注意里程碑是表的名称

于 2016-06-07T07:28:18.910 回答
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
}
于 2016-12-12T14:48:05.317 回答
-1

这是我能够使其正常工作的唯一方法:

$result=$this->ModelName->save($whatever);
$record_id=$result['id'];
于 2015-10-21T22:49:13.100 回答
-1

这应该可以正常工作:

$entity = $this->MyModel->newEntity($this->request->data())
$result= $this->MyModel->save($entity);
$id = $result->id;
于 2016-12-02T17:27:11.093 回答