php - getrepository - symfony 4 database config
ActualizaciĆ³n de Doctrine 2 de la entidad (4)
Deberías llamar a merge en lugar de persistir:
$data = new MyEntity();
$data->setId(123);
$data->setName(''test'');
$entityManager->merge($data);
$entityManager->flush();
¿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.
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.
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.
Tuve que usar
$entityManager->merge($data)