Outils pour utilisateurs

Outils du site


symfony4:database_renommer_entite

Renommer une entité

Dans cet exemple, on renomme l'entité Personne en Individu.

Renommer la table dans la base de données

Générer une nouvelle migration vide :

php bin/console doctrine:migrations:generate

Ajouter le code dans les fonctions up() et down() de la migration :

public function up(Schema $schema) : void
{
    // this up() migration is auto-generated, please modify it to your needs
    $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.');
    $this->addSql('RENAME TABLE personne TO individu');
}
 
public function down(Schema $schema) : void
{
    // this down() migration is auto-generated, please modify it to your needs
    $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.');
    $this->addSql('RENAME TABLE individu TO personne');
}
:!: Ne pas appliquer cette migration tout de suite…

Renommer la classe de l'Entité

Renommer le fichier src/Entity/Personne.php en src/Entity/Individu.php.

Éditer le fichier en modifiant toutes les instances de Personne :

  • Nom de la classe
  • Nom du Repository
  • Nom de la classe dans les relations au sein des autres entités (champs OneToMany, ManyToMany, …)
    • Y compris dans les fonctions getters et setters
/src/Entity/Individu.php
...
 
/**
 * @ORM\Entity(repositoryClass="App\Repository\IndividuRepository")
 */
class Individu
{
    ...
}

Renommer la classe de Repository

Renommer le fichier src/Repository/PersonneRepository.php en src/Repository/IndividuRepository.php.

Éditer le fichier en modifiant toutes les instances de Personne :

  • Nom de l'entité utilisée
  • Nom de la classe
  • Référence de la classe entité dans le contructeur
  • Annotations, types des paramètres et fonctions
src/Repository/IndividuRepository.php
...
 
use App\Entity\Individu;
 
...
 
class IndividuRepository extends ServiceEntityRepository
{
    public function __construct(ManagerRegistry $registry)
    {
        parent::__construct($registry, Individu::class);
    }
 
    // MODIFIER AUSSI TOUTES LES ANNOTATIONS ET LES TYPES INDIQUÉS
    // COMME PARAMÈTRES OU VALEURS DE RETOUR DES FONCTIONS.
 
}

Modifier les contrôleurs, templates, formulaires, ...

Remplacer Personne par Individu dans tous les contrôleurs où la classe est utilisée.

S'il y a des templates qui utilisent l'ancien nom de l'entité, les modifier également.

Modifier les fixtures

Si elle existe, renommer la classe PersonneFixtures en IndividuFixtures.

Remplacer Personne par Individu dans les autres fixtures où la classe est utilisée.

Appliquer la migration

php bin/console doctrine:migrations:migrate

Vider le cache de Symfony

php bin/console cache:clear
symfony4/database_renommer_entite.txt · Dernière modification: 2020/05/23 06:01 (modification externe)