Come posso ottenere l'ultimo ID di inserimento con doctrine 2 ORM? Non l'ho trovato nella documentazione della dottrina, è possibile?Ottieni l'ultimo ID di inserimento con doctrine 2?
risposta
ho dovuto usare questo dopo che il filo di ottenere l'ultimo inserto ID:
$em->persist($user);
$em->flush();
$user->getId();
Non posso usarlo. Ottenere errore Chiamare al metodo non definito Test \ Entity \ Test :: getId() in "Il mio progetto" –
@ noobie-php È necessario definire un public getter per il proprio ID (se questo è privato come dovrebbe essere) – cheesemacfly
@cheesemacfly : Ho già risolto questo errore viene generato (nel mio scenario) quando non siamo in grado di flush() per qualsiasi motivo, una volta che Flush() viene eseguito correttamente getID() inizia a funzionare, assumendo getter e setter non sono un problema qui –
Calling flush() può potenzialmente aggiungere un sacco di nuove entità, per cui ci riesca davvero il concetto di "lastInsertId". Tuttavia Doctrine popolerà i campi identità ogni volta che ne viene generato uno, quindi l'accesso al campo id dopo aver chiamato flush conterrà sempre l'ID di una nuova entità "persistente".
È possibile accedere all'ID dopo aver chiamato il metodo persistente del gestore entità.
$widgetEntity = new WidgetEntity();
$entityManager->persist($widgetEntity);
$entityManager->flush();
$widgetEntity->getId();
È fai necessità di irrigare al fine di ottenere questo ID.
Sintassi Errore Correzione: Aggiunto punto e virgola dopo $ entityManager-> flush() viene chiamato.
Ho dovuto svuotare per recuperare il valore. Persistere non è stato sufficiente, dal momento che gli elementi non vengono effettivamente scritti nel database finché non si svuota. –
Un po 'in ritardo per rispondere alla domanda. Ma,
Se si tratta di un database MySQL
dovrebbe $doctrine_record_object->id
lavoro se AUTO_INCREMENT
è definito nel database e nella definizione della tabella.
Se non si utilizza entità ma di SQL Server Native come mostrato here allora si potrebbe desiderare di ottenere l'ultimo ID inserito come illustrato di seguito:
$entityManager->getConnection()->lastInsertId()
Per i database con sequenze come PostgreSQL prega di notare che è possibile fornire il nome della sequenza come primo parametro del metodo lastInsertId
.
$entityManager->getConnection()->lastInsertId($seqName = 'my_sequence')
Per ulteriori informazioni un'occhiata al codice su GitHub here e here.
Potrebbe non funzionare con tutti i DBMS. Ad esempio, non funziona con Postgres (a causa delle sequenze) –
Fantastico !! Ho passato ore a cercare questo piccolo frammento. – MikeGA
@ paul.ago Hai solo bisogno di conoscere il nome della sequenza, ad esempio: 'lastInsertId ('articles_id_seq')' – ChocoDeveloper
prova questo, alla fine del tuo inserto restituisci l'id ... come return $ this-> id; – Manie