sql >> Base de Datos >  >> RDS >> Mysql

Cómo guardar una entidad de Doctrine en dos tablas de base de datos (requerido para la optimización de MySQL)

Voy a sugerir un enfoque diferente a pesar de que es una pregunta un poco más antigua. En lugar de hacer dos entidades, deberías hacer tres.

Cree FileMetadata, que contiene el nombre, tipo MIME, etc. Cree FileContent, que contiene el contenido. Luego, cree un tercer archivo de entidad que tenga una conexión uno a uno con uno de cada uno de los otros tipos, y asígnele un montón de métodos que simplemente llamen a los métodos coincidentes en las subentidades.

Entonces, por ejemplo, en Archivo, el método setName se vería así:

  public function setName() {
    $this->getFileMetadata()->getName();
  }

Y el conjunto se vería así:

  public function setName( $name ) {
    $this->getFileMetadata()->setName( $name );
  }

El constructor de la entidad File debe crear un nuevo FileMetadata y un nuevo FileContent en la creación y NO debe tener un método setFilemetadata o setFilecontent; estas dos entidades deben estar completamente protegidas de su aplicación.

Ahora tiene la entidad Archivo, que se maneja exactamente como usted quiere (una sola entidad, sin subentidades adicionales) que aún se almacena ordenadamente en dos (bueno, tres en realidad) tablas diferentes.