Outils pour utilisateurs

Outils du site


symfony4: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 Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\Persistence\ObjectManager;
use App\Entity\Article;
 
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

php bin/console doctrine:fixtures:load
Attention, tout le contenu de la base de données est supprimé avant la génération des données des fixtures.

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 Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\Persistence\ObjectManager;
use App\Entity\Personne;
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.

symfony4/fixtures.txt · Dernière modification: 2019/06/27 05:59 par marclebrun