Symfony 3 / Doctrine : Suppression des tables plus utilisées

En Symfony 3, lorsque vous ajoutez des entités Doctrine par la méthode de votre choix (annotations ou YAML), vous pouvez constater que la commande suivante génère les requêtes CREATE TABLE nécessaires pour mettre à jour la structure de votre base de données :

php bin/console doctrine:schema:update --dump-sql

Requêtes qui peuvent être exécutées simplement à l'aide de la commande :

php bin/console doctrine:schema:update --force

De même lorsque vous rajoutez ou modifiez un champ dans une entité, la commande en question générera les requêtes ALTER TABLE appropriées.


En revanche, vous avez peut-être eu l'occasion de constater que lorsque que vous supprimez une entité de votre mapping, la commande mentionnée ci-dessus ne générera pas de requêtes DROP TABLE.

Il est en fait possible de générer ces requêtes DROP TABLE grâce à l'option --complete :

Ainsi, pour afficher le SQL :

php bin/console doctrine:schema:update --complete --dump-sql

Et pour l'exécuter :

php bin/console doctrine:schema:update --complete --force

Cela aura pour effet de supprimer toutes les tables qui ne sont pas mappées sur des entités Doctrine.

ATTENTION : Bien entendu, si vous avez des tables non mappées que vous souhaitez conserver, il ne faut pas exécuter cette commande, sous peine de les perdre !

Vous pouvez consulter l'aide de cette option, et plus généralement, l'aide de la commande doctrine:schema:update, en tapant :

php bin/console help doctrine:schema:update

Vous obtiendrez ainsi le texte suivant :

Usage:
  doctrine:schema:update [options]

Options:
      --complete        If defined, all assets of the database which are not relevant to the current metadata will be
                        dropped.
      --dump-sql        Dumps the generated SQL statements to the screen (does not execute them).
  -f, --force           Causes the generated SQL statements to be physically executed against your database.
      --em[=EM]         The entity manager to use for this command
  -h, --help            Display this help message
  -q, --quiet           Do not output any message
  -V, --version         Display this application version
      --ansi            Force ANSI output
      --no-ansi         Disable ANSI output
  -n, --no-interaction  Do not ask any interactive question
  -e, --env=ENV         The environment name [default: "dev"]
      --no-debug        Switches off debug mode
  -v|vv|vvv, --verbose  Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for
                        debug

Help:
  The doctrine:schema:update command generates the SQL needed to
  synchronize the database schema with the current mapping metadata of the
  default entity manager.
  
  For example, if you add metadata for a new column to an entity, this command
  would generate and output the SQL needed to add the new column to the database:
  
  doctrine:schema:update --dump-sql
  
  Alternatively, you can execute the generated queries:
  
  doctrine:schema:update --force
  
  If both options are specified, the queries are output and then executed:
  
  doctrine:schema:update --dump-sql --force
  
  Finally, be aware that if the --complete option is passed, this
  task will drop all database assets (e.g. tables, etc) that are *not* described
  by the current metadata. In other words, without this option, this task leaves
  untouched any "extra" tables that exist in the database, but which aren't
  described by any metadata.
  
  Hint: If you have a database with tables that should not be managed
  by the ORM, you can use a DBAL functionality to filter the tables and sequences down
  on a global level:
  
      $config->setFilterSchemaAssetsExpression($regexp);
Tags :
Symfony
Doctrine
Console