IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

[Symfony2][Doctrine] Ordre de chargement des fixtures [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 43
    Points : 42
    Points
    42
    Par défaut [Symfony2][Doctrine] Ordre de chargement des fixtures
    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 :
    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;
    	}
    }
    Versions :
    Symfony 2.4.4
    Composer 0c343f925ad578a9da4d9a4cfff4e91b500d206c
    doctrine-fixtures-bundle "2.2.*"

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Points : 1 220
    Points
    1 220
    Par défaut
    bonjour,

    tu certainement besoin de partager les références des objets crées dans la fixture catégorie pour pouvoir associés chacune des références à des objets crées dans la fixture Article.
    Pour ce faire dans la fixture Categorie:

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            $this->addReference('symfony', $uneInstanceDeCatgorieSf);
            $this->addReference('doctrine2', $uneInstanceDeCatgorieDoctrine);
    pour stocker la référence de l'entité crée dans catégorie.

    et dans la fixture Article tu peux récuperer la référence d'un objet crée depuis Categorie

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        //récupération d'un l'objet
            $this->addReference('symfony', $uneInstanceDeArticle);

    sur le lien suivant tout expliqué DoctrineFixturesBundle surtout la partie Partager des objets entre les fixtures qui te concerne

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 4
    Points : 10
    Points
    10
    Par défaut
    Si tu veux utiliser la fonction getOrder(), il faut implémenter OrderedFixtureInterface

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
     
    class LoadUserData extends AbstractFixture implements OrderedFixtureInterface
    {
       ...
    }
    Lien sur la doc: http://symfony.com/doc/current/bundl...dle/index.html

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 43
    Points : 42
    Points
    42
    Par défaut
    Effectivement je n'avais pas vu qu'il existait plusieurs interfaces, le getOrder() fonctionne beaucoup mieux ainsi.

    Partager les références et laisser doctrine gérer les dépendances est une bonne solution aussi je n'avais pas envie de retoucher au code mais les prochaines fois j'essaierais ça.

    Merci à vous deux

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ordre de chargement des war dans un ear
    Par menzlitsh dans le forum Wildfly/JBoss
    Réponses: 2
    Dernier message: 01/03/2010, 20h53
  2. Gestion de l'ordre de chargement des images
    Par MrManchot dans le forum jQuery
    Réponses: 1
    Dernier message: 25/01/2010, 14h42
  3. Réponses: 6
    Dernier message: 28/10/2008, 12h11
  4. Ordre de chargement des librairies
    Par Duc Lebowski dans le forum Weblogic
    Réponses: 1
    Dernier message: 15/01/2008, 16h31
  5. [weblogic 6][ejb]Ordre de chargement des classes
    Par Tistou07 dans le forum Weblogic
    Réponses: 1
    Dernier message: 14/02/2007, 10h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo