La Migration pour synchroniser votre base de données
C'est quoi une Migration ?
Comme nous l’avons vu dans la leçon précédente sur l’Entité, nous avons conçu le schéma de notre base de données et nous devons maintenant synchroniser la structure de la table.
Pour ce faire, nous allons utiliser la Migration.
Une migration est un fichier PHP contenant le code SQL nécessaire pour mettre à jour votre base de données sans perdre vos données existantes.
Générer la Migration
Après avoir créé ou modifié une Entité, Symfony doit comparer votre code PHP avec l'état actuel de votre base de données.
Lancez la commande suivante.
php bin/console make:migration
Si votre Entité et votre base de données ne correspondent pas, Symfony générera un fichier dans le dossier /migrations.
<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* Auto-generated Migration: Please modify to your needs!
*/
final class Version20260410105039 extends AbstractMigration
{
public function getDescription(): string
{
return '';
}
public function up(Schema $schema): void
{
// this up() migration is auto-generated, please modify it to your needs
$this->addSql('CREATE TABLE article (id INT AUTO_INCREMENT NOT NULL, title VARCHAR(255) NOT NULL, content VARCHAR(255) NOT NULL, PRIMARY KEY (id)) DEFAULT CHARACTER SET utf8mb4');
$this->addSql('CREATE TABLE messenger_messages (id BIGINT AUTO_INCREMENT NOT NULL, body LONGTEXT NOT NULL, headers LONGTEXT NOT NULL, queue_name VARCHAR(190) NOT NULL, created_at DATETIME NOT NULL, available_at DATETIME NOT NULL, delivered_at DATETIME DEFAULT NULL, INDEX IDX_75EA56E0FB7336F0E3BD61CE16BA31DBBF396750 (queue_name, available_at, delivered_at, id), PRIMARY KEY (id)) DEFAULT CHARACTER SET utf8mb4');
}
public function down(Schema $schema): void
{
// this down() migration is auto-generated, please modify it to your needs
$this->addSql('DROP TABLE article');
$this->addSql('DROP TABLE messenger_messages');
}
}
Dans ce fichier, vous pouvez apercevoir des requêtes SQL, ce qui est normal.
Appliquer la migration
D’une certaine manière, nous avons préparé la migration et maintenant, il nous faut l'appliquer.
Pour cela, tapez une nouvelle commande.
php bin/console doctrine:migrations:migrate
Le terminal vous posera une question à laquelle vous devrez répondre par yes.
WARNING! You are about to execute a migration in database "symfony_db" that could result in schema changes and data loss. Are you sure you wish to continue? (yes/no) [yes]:
> yes
Et voilà ! 😊
Un message va vous confirmer que les choses ont bien fonctionné.
[OK] Successfully migrated to version: DoctrineMigrations\Version20260410105039
Vérifier dans phpMyAdmin
Nous allons vérifier dans l'interface phpMyAdmin.
Pour y accéder, il faut tapez localhost:8080 !
Comme vous pouvez le constater, la table article a été créée avec la structure définie dans notre Entité. 👌
Toute modification apportée à l’Entité nécessitera de nouveaux préparer et lancer la migration afin d’intégrer ces changements dans votre base de données.
Attention : Si vous devez apporter une modification, veuillez vous assurer qu’elle est bien validée par l’Entité. Évitez de modifier un fichier de migration déjà migré, car cela pourrait entraîner des problèmes. 😵💫
Notre table est vide pour l’instant, mais nous verrons comment y insérer des données dans la prochaine leçon.
