2014-09-24 15 views
13

Làm việc với CakePHP 3.0 beta, có vẻ như là một vấn đề đơn giản, nhưng tôi đã tìm kiếm thông qua các tài liệu và không thể tìm thấy bất cứ điều gì. Sau khi chèn một bản ghi mới bằng cách sử dụng $ this-> Model-> save(), tôi muốn nhận được ID khóa chính auto_increment của bản ghi mới được tạo.Làm thế nào để bạn nhận được ID chèn cuối cùng trong CakePHP 3.0?

Với Bánh 2.x, tôi có thể làm:

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

hoặc

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

Tuy nhiên không ai trong số những người dường như làm việc trong CakePHP 3.0.

Cảm ơn

Trả lời

26

Cuối cùng tìm thấy câu trả lời, nếu ai khác chạy vào làm điều này:

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

Đây là cuốn sách ở đây: http://book.cakephp.org/3.0/ vi/orm/saving-data.html # inserting-data – alecho

+0

Đối với tôi: '$ record_id = $ result ['ModelName'] ['id']' –

+0

điều này chắc chắn hoạt động tốt nhất.Istead tiết kiệm bên trong nếu, làm nó một dòng ở trên và chỉ nhận được nếu ($ kết quả) – mewc

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

$record_id=$result->id; 
+1

Với phương pháp này, chúng tôi có thể nhận được ID sai nếu một thread/process/server/etc chèn cùng một lúc. –

1

Những công việc cho các mô hình ORM thực sự.

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

Đây là cách duy nhất tôi đã có thể có được điều này để làm việc một cách chính xác:

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

Trong CakePHP 3.0

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

LƯU Ý Mốc là tên của bảng

-1

này nên hoạt động tốt:

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

Tôi đã đấu tranh với điều này cho khá trong một trước khi nó hoạt động. Phương thức lưu sẽ cập nhật thực thể với id chèn cuối cùng miễn là id tổ chức chưa được đặt. Nếu bạn đang tạo ra một kỷ lục mới và id thực thể được thiết lập để không những phương pháp tiết kiệm sẽ không cập nhật nó vì vậy hãy chắc chắn rằng id thực thể không được thiết lập:

$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

Bạn có thể giải quyết vấn đề này sau cách.

Đối với CakePHP 3.x

$result = $this->ModelName->save($this->request->data); 
$insertedId = $result->id; 

Đối với CakePHP 2.x

$this->ModelName->save($this->request->data); 
$insertedId = $this->ModelName->getLastInsertId(); 
+0

'$ insertedId = $ this-> ModelName-> id;' sai cho 3.x. Vui lòng thay đổi –

+0

@KimStacks giải pháp này phù hợp với tôi. – Faisal

Các vấn đề liên quan