symfony doctrine setear manualmente el id auto incremental de una entidad


creamos la entidad normalmente que se generará con un id bajo la estrategia AUTO
fijarse que doctrine genera el método getId pero no el de setId...entonces, hay que crearlo.

para poder setear manualmente el id, debemos cambiar dinámicamente por código la estrategia de la entidad, después del persist, antes del flush:

(testeado en symfony 2.8)

                $em = $this->getContainer()->get('doctrine.orm.default_entity_manager');

$name=$input->getArgument('articuloName');
$id=$input->getArgument('articuloId');
$product = new Articulo();
$product->setId($id);
$product->setNombre($name);

$em->persist($product);

$metadata = $em->getClassMetaData(get_class($product));
$metadata->setIdGenerator(new AssignedGenerator());
$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE);

$em->flush();


cuando no se setee manualmente el id, doctrine tomará como último id ingresado el de mayor valor de la tabla.

No hay comentarios:

Publicar un comentario

linux ubuntu mint actualizar chrome

 desde una terminal: $ sudo apt update $ sudo apt install google-chrome-stable