2014-09-24 7 views
13

Die Arbeit mit der CakePHP 3.0 Beta scheint ein einfaches Problem zu sein, aber ich habe die Dokumente durchsucht und finde nichts. Nach dem Einfügen eines neuen Datensatzes mit $ this-> Model-> save() möchte ich die Primärschlüssel-ID auto_increment des neu erstellten Datensatzes erhalten.Wie erhalten Sie die letzte Einfüge-ID in CakePHP 3.0?

Mit Kuchen 2.x, was ich tun konnte:

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

oder

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

jedoch keiner von denen scheint in CakePHP 3.0 zu arbeiten.

Dank

Antwort

26

fand schließlich die Antwort, wenn jemand anderes in diesem do läuft:

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

Dies ist das Buch hier: http://book.cakephp.org/3.0/ de/orm/saving-data.html # einfügung-daten – alecho

+0

Für mich: '$ record_id = $ result ['ModelName'] ['id']' –

+0

das funktioniert sicherlich am besten.Istead der im Inneren der wenn speichern, tut es eine Zeile oben und bekam nur if ($ result) – mewc

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

$record_id=$result->id; 
+1

Mit dieser Methode, die wir falsch ID, wenn ein anderer Thread/Prozess/Server/etc Einsätze zur gleichen Zeit bekommen kann. –

1

Diese Arbeit für die tatsächlich Modell ORM.

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

Dies ist der einzige Weg, ich in der Lage war zu bekommen dies korrekt funktionieren kann:

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

In CakePHP 3.0

HINWEIS Meilensteine ​​ist der Name der Tabelle

-1

Dies sollte funktionieren:

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

Ich habe mit diesem für eine ganze Weile zu kämpfen, bevor es an die Arbeit zu bekommen. Die Speichermethode aktualisiert die Entität mit der letzten Einfüge-ID, solange die Entitäts-ID nicht bereits festgelegt ist. Wenn Sie einen neuen Eintrag erstellen und die Einheit-ID gesetzt, um die Speichermethode auf Null wird es so sicher sein, nicht aktualisieren, dass die Einheit-ID nicht gesetzt:

$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

Sie dieses Problem folgendermaßen lösen kann.

Für CakePHP 3.x

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

Für CakePHP 2.x

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

'$ insertedId = $ this-> ModelName-> id;' ist falsch für 3.x. Bitte ändern Sie –

+0

@KimStacks diese Lösung funktioniert für mich. – Faisal

Verwandte Themen