2010-08-18 12 views

Respuesta

140

tuve que usar esto después de la descarga para conseguir la última Identificación del inserto:

$em->persist($user); 
$em->flush(); 
$user->getId(); 
+2

No puedo usarlo. Obteniendo el error Llamada al método indefinido Test \ Entity \ Test :: getId() en "Mi proyecto" –

+0

@ noobie-php Necesitas definir un getter público para tu Id (si este es privado como debería ser) – cheesemacfly

+0

@cheesemacfly : Ya resolví esto, este error se genera (en mi escenario) cuando no podemos Descargar() por alguna razón, una vez que Flush() se ejecuta correctamente, getID() comienza a funcionar, asumiendo que getter y setters no son un problema aquí –

9

Llamando al ras() puede potencialmente añadir un montón de nuevas entidades, por lo que no es realmente la noción de "lastInsertId". Sin embargo, Doctrine rellenará los campos de identidad cada vez que se genere uno, por lo que acceder al campo id después de llamar al color siempre contendrá la ID de una entidad nueva "persistente".

29

Puede acceder a la identificación después de llamar al método de persistencia del administrador de entidades.

$widgetEntity = new WidgetEntity(); 
$entityManager->persist($widgetEntity); 
$entityManager->flush(); 
$widgetEntity->getId(); 

Usted hace necesidad de enjuagar con el fin de obtener esta identificación.

Error de sintaxis Reparado: Se ha agregado un punto y coma después de invocar $ entityManager-> flush().

+6

Tuve que enjuagar para recuperar el valor. Persistir no fue suficiente, ya que los artículos en realidad no se escriben en la base de datos hasta que se vacían. –

3

Un poco tarde para responder a la pregunta. Pero,

Si se trata de una base de datos MySQL

debe $doctrine_record_object->id trabajo si AUTO_INCREMENT se define en la base de datos y en su definición de la tabla.

17

Si no se está usando, pero las entidades de SQL nativo como se muestra here entonces es posible que desee obtener el último ID insertado como se muestra a continuación:

$entityManager->getConnection()->lastInsertId() 

Para bases de datos con secuencias tales como PostgreSQL favor no que pueda proporcione el nombre de la secuencia como el primer parámetro del método lastInsertId.

$entityManager->getConnection()->lastInsertId($seqName = 'my_sequence') 

Para más información eche un vistazo al código en GitHub here y here.

+0

Esto podría no funcionar con todos los DBMS. Por ejemplo, no funciona con Postgres (debido a las secuencias) –

+0

Awesome !! Pasé horas buscando este pequeño fragmento. – MikeGA

+4

@ paul.ago Solo necesita saber el nombre de la secuencia, por ejemplo: 'lastInsertId ('articles_id_seq')' – ChocoDeveloper

Cuestiones relacionadas