6. Ajoutons nos fixtures

Commençons par faire appel au DoctrineFixturesBundle en lançant la commande :  

composer require orm-fixtures --dev

 

Créons nos premières fixtures

Créons nos premières fixtures en lançant la commande : 

./bin/console make:fixtures

Appelons ce fichier PhoneFixtures

Notre fichier a été généré par le MakerBundle, allons le modifier.

Le MakerBundle nous a aussi généré le fichier AppFixtures, que vous pouvez supprimer, nous ne nous en servirons pas ici.

Voici le fichier généré :

<?php

namespace App\DataFixtures;

use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\Persistence\ObjectManager;

class PhoneFixtures extends Fixture
{
    public function load(ObjectManager $manager)
    {
        // $product = new Product();
        // $manager->persist($product);

        $manager->flush();
    }
}

Modifions ce fichier en insérant nos propres fixtures :

<?php

namespace App\DataFixtures;

use App\Entity\Phone;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\Persistence\ObjectManager;

class PhoneFixtures extends Fixture
{
    private $names = ['iPhone', 'Samsung'];
    private $colors = ['black', 'white'];

    public function load(ObjectManager $manager)
    {
        for($i = 1; $i <= 20; $i++) {
            $phone = new Phone();
            $phone->setName($this->names[rand(0,1)]. ' ' . rand(5, 8));
            $phone->setColor($this->colors[rand(0,1)]);
            $phone->setPrice(rand(500, 1000));
            $phone->setDescription('A wonderful phone with ' . rand(10, 50) . ' tricks');

            $manager->persist($phone);
        }

        $manager->flush();
    }
}

 

Pour ceux qui souhaitent utiliser Faker pour générer des données fictives, libre à vous, le principe est le même.

Quelques explications : 

- Ici, une boucle plusieurs a été faite pour générer plusieurs fixtures (20 au total). Cela nous permettra d'avoir suffisamment de téléphones pour travailler avec. Je n'ai pas ajouté les modèles récents mais libre à vous de faire ce que vous souhaitez.

- Les données sont récupérées de manière dynamique, cela permet de ne pas écrire en dur plusieurs fois celles-ci.

- attention à ne pas oublier le persist, sinon, cela ne sera pas inséré en base de données. On termine avec le flush bien évidemment 😊

Mettons maintenant à jour notre base de données 😉

 

Mettre à jour la base de données

Lances la commande : 

./bin/console doctrine:fixtures:load

Confirmez l'action, et allez voir votre base de données.

Il est maintenant temps de récupérer ces ressources. C'est l'objet du prochain chapitre.