Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como salvar uma entidade do Doctrine em duas tabelas de banco de dados (necessário para otimização do MySQL)


Vou sugerir uma abordagem diferente, embora seja uma pergunta um pouco mais antiga. Em vez de fazer duas entidades, você deve fazer três.

Crie FileMetadata, que contém o nome, tipo MIME, etc. Crie FileContent, que contém o conteúdo. Em seguida, crie um terceiro arquivo de entidade que mantenha uma conexão um-para-um com um de cada um dos outros tipos e forneça a ele vários métodos que simplesmente chamam os métodos correspondentes nas subentidades.

Então, por exemplo, em File, o método setName ficaria assim:
  public function setName() {
    $this->getFileMetadata()->getName();
  }

E o conjunto ficaria assim:
  public function setName( $name ) {
    $this->getFileMetadata()->setName( $name );
  }

O construtor da entidade File deve criar um novo FileMetadata e um novo FileContent na criação e NÃO deve ter um método setFilemetadata ou setFilecontent; essas duas entidades devem ser completamente protegidas do seu aplicativo.

Agora você tem a entidade File, que trata exatamente como você deseja (uma única entidade, sem subentidades adicionais) que ainda é armazenada ordenadamente em duas (bem, três realmente) tabelas diferentes.