« Précédent

Doctrine et la base de données (Alimentation)

Afin de faire fonctionner notre application pendant la phase de développement nous devons alimenter la base avec des données.

Les Fixtures

Symfony nous offre la possibilité de générer des données en base. L'extension n'est pas présente par défaut mais nous allons l'ajouter à nos dépendance de dev.

composer require --dev orm-fixtures

puis

symfony console make:fixture

Un nouveau dossier DataFixture doit avoir été ajouté à votre projet ainsi que la classe AppFixtures.php .

On va ajouter une autre extension pour générer aléatoirement des données: FakerPhp

composer require fakerphp/faker

Utilisons ces deux outils

Dans le fichier DataFixture/AppFixtures.php ajoutez ce qui suit

<?php

namespace App\DataFixtures;

use Faker\Factory;
use App\Entity\Note;
use Faker\Generator;
use App\Entity\Theme;
use Doctrine\Persistence\ObjectManager;
use Doctrine\Bundle\FixturesBundle\Fixture;

class AppFixtures extends Fixture
{

    // Déclaration du générateur de faker
    private Generator $faker;

    public function __construct()
    {
        $this->faker = Factory::create('fr_FR');
    }

    public function load(ObjectManager $manager): void
    {
        // Utilisation de faker pour générer des données en base
        // pour les loader un simple symfony console d:f:l
        $themes = [];
        for($i=1; $i<=5; $i++){
            $theme = new Theme();
            $theme->setNom($this->faker->word());//génération d'un mot
            $theme->setDescription($this->faker->sentence());//génération d'une phrase
            $themes[]= $theme;
            $manager->persist($theme);
        }

        for ($i = 1; $i <= 54; $i++) {
            $note = new Note();
            $note->setSujet($this->faker->sentence(3));
            $note->setContenu($this->faker->paragraph());
            $note->setTheme($themes[mt_rand(0, count($themes) - 1)]);// On pioche dans le tableau de theme au hasard
            $manager->persist($note);
        }

        $manager->flush();
    }
}

Pour utiliser cette fixture il suffit de lancer la commande suivante dans la console

symfony console doctrine:fixtures:load

Votre base devrait avoir maintenant 5 themes et 55 notes.