symfony2 consultas php doctrine doctrine2 temporal-database

php - consultas doctrine symfony2



Cómo volver a guardar la entidad como otra fila en Doctrine 2 (2)

Digamos que tengo entidad $e . ¿Hay alguna forma genérica de almacenarlo como otra fila, que tendría los mismos datos de entidad pero otra clave principal?

Por qué necesito esto: estoy implementando algún tipo de esquema de base de datos temporal y, en lugar de actualizar la fila, solo necesito crear otro.


Aquí hay una estrategia simple que utilicé que no implica una complejidad excesiva:

$new->fromArray( $old->toArray() ); $new->id = NULL;


Intente la clonación y agregue el siguiente método a su entidad

public function __clone() { $this->id = null; }

Es posible que necesite detach la entidad antes de persistirla. No tengo mi máquina dev a la mano para probar esto ahora mismo.

$f = clone $e; $em->detach($f); $em->persist($f); $em->flush();

Actualizar

Acabo de intentar usar una simple demostración de SQLite. No deberías tener que hacer nada. Lo siguiente funcionó para mí sin agregar un método __clone() o hacer cualquier otra cosa fuera de lo común

$new = clone $old; $em->persist($new); $em->flush();

Una vez vaciado, la $new entidad $new tenía una nueva ID y se guardó como una nueva fila en la base de datos.

Todavía anularía la propiedad ID a través del método __clone() , ya que tiene sentido desde una vista de modelo puro.

Actualización 2

Al investigar el código de Doctrine, esto se debe a que las clases de proxy generadas implementan __clone() con esta línea importante

unset($this->_entityPersister, $this->_identifier);