php - generate - implementando "actualizar si existe" en Doctrine ORM
generate entities symfony 4 (4)
Estoy tratando de INSERT OR UPDATE IF EXISTS
en una transacción.
en mysql , generalmente usaría DUPLICATE KEY
("UPDATE ON DUPLICATE KEY".) Soy consciente de muchas soluciones a este problema usando varias variantes y subconsultas de SQL, pero estoy tratando de implementar esto en Doctrine (PHP ORM ). Parece que habría métodos de Doctrine para hacer esto, ya que está repleto de funciones, pero no encuentro nada. ¿Es este tipo de cosas un problema al usar paquetes ORM de PHP por alguna razón? ¿O algún experto en Doctrine sabe cómo lograrlo a través de hacks o por cualquier medio?
Creo que la mejor manera es llamar a entityManager-> merge ($ entity); Porque es lo más cercano a actualizar si existe la operación como se prometió en la documentación: https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/working-with-objects.html
De acuerdo con https://www.vivait.co.uk/labs/updating-entities-when-an-insert-has-a-duplicate-key-in-doctrine esto se puede lograr con $entityManager->merge()
.
$entity = new Table();
$entity->setId(1);
$entity->setValue(''TEST'');
$entityManager->merge($entity);
$entityManager->flush();
Doctrine admite REPLACE INTO
utilizando el método replace()
. Esto debería funcionar exactamente como la ON DUPLICATE KEY UPDATE
que estaba buscando.
Documentos: Reemplazo de registros
Lo único que se me ocurre es consultar primero a la entidad si existe, de lo contrario, crear una nueva entidad.
if(!$entity = Doctrine::getTable(''Foo'')->find(/*[insert id]*/))
{
$entity = new Foo();
}
/*do logic here*/
$entity->save();