Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment enregistrer une entité Doctrine dans deux tables de base de données (requis pour l'optimisation MySQL)

Je vais suggérer une approche différente même si c'est une question un peu plus ancienne. Au lieu de faire deux entités, vous devriez en faire trois.

Créez FileMetadata, qui contient le nom, le type mime, etc. Créez FileContent, qui contient le contenu. Ensuite, créez une troisième entité File qui contient une connexion un à un avec l'un de chacun des autres types, et donnez-lui un tas de méthodes qui appellent simplement les méthodes correspondantes sur les sous-entités.

Ainsi, par exemple dans File, la méthode setName ressemblerait à ceci :

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

Et l'ensemble ressemblerait à ceci :

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

Le constructeur de l'entité File doit créer un nouveau FileMetadata et un nouveau FileContent lors de la création et ne doit PAS avoir de méthode setFilemetadata ou setFilecontent; ces deux entités doivent être complètement protégées de votre application.

Vous avez maintenant l'entité File, qui gère exactement comme vous le souhaitez (une seule entité, pas de sous-entités supplémentaires) qui est toujours soigneusement stockée dans deux (enfin, trois vraiment) tables différentes.