Bonjour,
Je suis face à un problème étrange que je n'arriver pas à régler seul, en suivant un tutoriel sur Symfony 2 je me suis retrouvé à devoir remplir une BD avec le plugin Fixture de Symfony pour Doctrine. Jusqu'ici tout marchait bien, j'arrive effectivement à charger la BD avec les données voulues en utilisant la commande "php app/console doctrine:fixtures:load" mais en avançant un peu je me suis retrouvé dans l'obligation de charger une entité avant une autre (Catégorie avant Article typiquement).
Dans un premier temps j'ai essayé de changer le nom des fichiers (ceux dans le dossier DataFixtures) en mettant des numéro devant pour forcer l'ordre. "1_Categorys.php" , "2_Articles.php". Mais sans succès, l’ordre changeait bien mais sans aucune logique apparente.
En suite j'ai essayé d'ajouter la méthode "getOrder()" dans chaque classes qui implémentent FixtureInterface, mais aucun changement.
Avez vous des idées ? Car là je suis perdu.
Exemple d'un fichier :
Versions :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 <?php // src/Sdz/BlogBundle/DataFixtures/ORM/Categorys.php namespace Sdz\BlogBundle\DataFixtures\ORM; use Doctrine\Common\DataFixtures\FixtureInterface; use Doctrine\Common\Persistence\ObjectManager; use Sdz\BlogBundle\Entity\Category; class Categorys implements FixtureInterface { // Dans l'argument de la méthode load, l'objet $manager est l'EntityManager public function load(ObjectManager $manager) { // Liste des noms de catégorie à ajouter $names = array('Symfony2', 'Doctrine2', 'Tutoriel', 'Évènement'); foreach($names as $i => $name) { // On crée la catégorie $liste_categorys[$i] = new Category(); $liste_categorys[$i]->setName($name); // On la persiste $manager->persist($liste_categorys[$i]); } // On déclenche l'enregistrement $manager->flush(); } public function getOrder() { return 1; } }
Symfony 2.4.4
Composer 0c343f925ad578a9da4d9a4cfff4e91b500d206c
doctrine-fixtures-bundle "2.2.*"
Partager