Actualización de Doctrine 2 de la entidad

¿Es posible actualizar una entidad de manera similar a la siguiente:

$data = new ATest(); // my entity $data->id = 1; // id 1 already exists, I just want to update this row $data->name = "ORM Tested"; // changed the name $entityManager->persist($data); $entityManager->flush(); 

Esto insertará y cambiará la identificación del objeto en lugar de actualizar la fila existente en la base de datos.

Deberías llamar a merge en lugar de persistir:

 $data = new MyEntity(); $data->setId(123); $data->setName('test'); $entityManager->merge($data); $entityManager->flush(); 

Tuve que usar

 $entityManager->merge($data) 

O simplemente obtenga la entidad administrada en lugar de una vacía.

 $data = $entityManager->getRepository('ATest')->findOne(1); // ATest is my entitity class $data->name = "ORM Tested"; // just change the name $entityManager->persist($data); $entityManager->flush(); 

Si la entidad ya está administrada, persistir () la actualizará en lugar de insertar una nueva.

También puede usar getReference para actualizar una propiedad de entidad por identificador sin recuperar el estado de la base de datos.

http://doctrine-orm.readthedocs.org/en/latest/reference/advanced-configuration.html#reference-proxies

Esto establecerá un Proxy simple para trabajar con la Entidad por ID en lugar de crear una new Entity o obtener explícitamente la Entidad de la base de datos utilizando find() , que luego se puede actualizar por flush.

 $data = $entityManager->getReference('ATest', $id); $data->setName('ORM Tested'); $entityManager->flush(); 

Esto es especialmente útil para actualizar las asociaciones OneToMany o ManyToMany de una entidad. EG: $case->addTest($data);

En general, es una mala práctica establecer manualmente el identificador de una nueva entidad, incluso si la intención es actualizar la entidad. En cambio, generalmente es mejor dejar que EntityManager establezca los identificadores apropiados. Por este motivo, Doctrine genera entidades de forma predeterminada con el identificador como propiedad privada sin método de establecimiento.