2014-09-24 12 views
13

Lavorare con la beta di CakePHP 3.0, sembra un problema semplice, ma ho cercato tra i documenti e non ho trovato nulla. Dopo aver inserito un nuovo record usando $ this-> Model-> save(), mi piacerebbe ottenere l'ID della chiave primaria auto_increment del record appena creato.Come si ottiene l'ultimo ID dell'inserto in CakePHP 3.0?

con la torta 2.x, che potevo fare:

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

o

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

Tuttavia nessuna di queste sembra funzionare in CakePHP 3.0.

Grazie

risposta

26

finalmente trovato la risposta, se qualcun altro si imbatte in questo do:

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

Questo è il libro qui: http://book.cakephp.org/3.0/ en/orm/saving-data.html # inserimento-dati – alecho

+0

Per me: '$ record_id = $ risultato ['ModelName'] ['id']' –

+0

questo funziona sicuramente meglio.Istanza di risparmio all'interno del se, facendo una riga sopra e appena ottenuto se ($ result) – mewc

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

$record_id=$result->id; 
+1

Con questo metodo potremmo ottenere un ID errato se un altro thread/processo/server/ecc inserisce nello stesso momento. –

1

Questi lavori per il modello in realtà ORM.

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

Questo è l'unico modo in cui sono stato in grado di farlo funzionare correttamente:

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

In CakePHP 3.0

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

NOTA Milestones è il nome della tabella di

-1

Questo dovrebbe funzionare bene:

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

ho lottato con questo per un bel po 'prima di farla funzionare. Il metodo di salvataggio aggiornerà l'entità con l'ultimo ID di inserimento purché l'id dell'entità non sia già impostato. se si sta creando un nuovo record e l'ID entità è impostato a zero il metodo save non aggiornerà in modo da essere sicuri che l'entità id non è impostato:

$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

è possibile risolvere questo problema come segue.

Per CakePHP 3.x

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

Per CakePHP 2.x

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

'$ insertedId = $ this-> ModelName-> id;' è sbagliato per 3.x. Si prega di cambiare –

+0

@KimStacks questa soluzione funziona per me. – Faisal

Problemi correlati