Подтвердить что ты не робот

Как получить последний идентификатор вставки в CakePHP 3.0?

Работа с бета-версией CakePHP 3.0 кажется простой проблемой, но я искал документы и ничего не могу найти. После вставки новой записи с помощью $this- > Model- > save() мне бы хотелось получить идентификатор первичного ключа auto_increment вновь созданной записи.

С Cake 2.x я мог бы сделать:

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

или

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

Однако ни один из них не работает в CakePHP 3.0.

Спасибо

4b9b3361

Ответ 1

Наконец-то нашел ответ, если кто-то еще сталкивается с этим:

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

Ответ 3

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

$record_id=$result->id;

Ответ 4

Вы можете решить эту проблему следующим образом.

Для 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();

Ответ 5

Они работают для фактически модели ORM.

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

Ответ 6

В CakePHP 3.0

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

ПРИМЕЧАНИЕ Вехи - это имя таблицы

Ответ 7

Я очень долго боролся с этим, прежде чем заставить его работать. Метод сохранения обновит объект до последнего идентификатора вставки, если идентификатор объекта еще не установлен. Если вы создаете новую запись, а идентификатор объекта устанавливается в ноль, метод сохранения не будет обновлять его, поэтому убедитесь, что идентификатор объекта не установлен:

$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

Это единственный способ заставить это работать правильно:

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

Ответ 9

Это должно работать нормально:

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