Outils pour utilisateurs

Outils du site


symfony5:database_fixtures

Fixtures

Il s'agit d'un composant permettant de créer des données à la volée dans la base de données.

Installation du composant fixtures

composer require orm-fixtures --dev

Création d'une fixture

php bin/console make:fixtures

Donner un nom à la fixture (p.ex. ArticlesFixtures).

Une classe ArticlesFixtures est créée dans src/DataFixtures.

Modifier la méthode load de cette classe.

Par exemple :

<?php
 
namespace App\DataFixtures;
 
use App\Entity\Article;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Persistence\ObjectManager;
 
class ArticlesFixtures extends Fixture
{
    public function load(ObjectManager $manager)
    {
        for($i = 1; $i <= 10; $i++) {
            $article = new Article();
            $article
                ->setTitle("Titre de l'article n°$i")
                ->setContent("<p>Contenu de l'article n°$i</p>")
                ->setImage("http://placehold.it/350x150")
                ->setCreatedAt(new \DateTime());
 
            $manager->persist($article);
        }
 
        $manager->flush();
    }
}

Exécuter les fixtures

:!: Attention, tout le contenu de la base de données est supprimé avant la génération des données par les fixtures

php bin/console doctrine:fixtures:load

Fixtures aléatoires avec Faker

Installer le composant faker (uniquement dans l'environnement dev) :

composer require fzaninotto/faker --dev

Ensuite il suffit de l'utiliser dans le code de la fixture :

<?php
namespace App\DataFixtures;
 
use App\Entity\Personne;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Persistence\ObjectManager;
use Faker;
 
class PersonnesFixtures extends Fixture
{
    public function load(ObjectManager $manager)
    {
        $faker = Faker\Factory::create('fr_FR');
 
        for($i = 1; $i <= 10; $i++) {
            $personne = new Personne();
            $personne->setNom($faker->name);
            $personne->setAdresse($faker->streetAddress);
            $personne->setVille($faker->city);
            $personne->setCodePostal($faker->postcode);
            $personne->setDescription($faker->text);
            $personne->setEmail($faker->email);
 
            $manager->persist($personne);
        }
        $manager->flush();
    }
}

Voir la doc de Faker pour toutes les possibilités.

symfony5/database_fixtures.txt · Dernière modification: 2020/04/29 05:40 (modification externe)