2014-09-24 3 views
13

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

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

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

или

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

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

Благодаря

ответ

26

Наконец нашел ответ, если кто-то работает в этом делать:

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

Это книга здесь: http://book.cakephp.org/3.0/ en/orm/save-data.html # inserting-data – alecho

+0

Для меня: '$ record_id = $ result ['ModelName'] ['id']' –

+0

это, безусловно, работает лучше всего.Идти сохранения внутри if, делая это на одну строку выше и только что полученную, если ($ result) – mewc

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

$record_id=$result->id; 
+1

С помощью этого метода мы можем получить неверный идентификатор, если в него вставляется другой поток/процесс/сервер/etc. –

1

Эти работы на самом деле ORM модели.

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

Это единственный способ, которым я был в состоянии получить это правильно работать:

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

В CakePHP 3,0

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

Примечание Вехи это имя таблицы

-1

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

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

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

$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 
} 
2

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

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

'$ insertId = $ this-> ModelName-> id;' неверно для 3.x. Пожалуйста, измените –

+0

@KimStacks это решение работает для меня. – Faisal