Ответ 1
Наконец-то нашел ответ, если кто-то еще сталкивается с этим:
$result=$this->ModelName->save($whatever);
$record_id=$result->id;
Работа с бета-версией CakePHP 3.0 кажется простой проблемой, но я искал документы и ничего не могу найти. После вставки новой записи с помощью $this- > Model- > save() мне бы хотелось получить идентификатор первичного ключа auto_increment вновь созданной записи.
С Cake 2.x я мог бы сделать:
$record_id=$this->ModelName->id;
или
$record_id=$this->ModelName->getLastInsertID();
Однако ни один из них не работает в CakePHP 3.0.
Спасибо
Наконец-то нашел ответ, если кто-то еще сталкивается с этим:
$result=$this->ModelName->save($whatever);
$record_id=$result->id;
to 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
$result=$this->ModelName->find('all',['fields'='id'])->last();
$record_id=$result->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();
Они работают для фактически модели ORM.
$result = $this->Model->save($data);
$id = $result->id;
В CakePHP 3.0
$statement = $query1->insert("columns of milestone");
$id = $statement->lastInsertId('Milestones'); //Here it will return the last insert 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
}
Это единственный способ заставить это работать правильно:
$result=$this->ModelName->save($whatever);
$record_id=$result['id'];
Это должно работать нормально:
$entity = $this->MyModel->newEntity($this->request->data())
$result= $this->MyModel->save($entity);
$id = $result->id;