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 :

générer plusieurs entités avec DoctrineFixturesBundle?


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2016
    Messages : 3
    Par défaut générer plusieurs entités avec DoctrineFixturesBundle?
    Bonjour, j'ai un probleme pour peupler mes entités via Doctrine.
    J'ai lu la documentation DoctrineFixturesBundle pour le partage d'entités, comme je veux en générer plusieurs d'un coup et je me sert de ArrayCollection en argument de la méthode addReference.
    Le probleme apparait pour récupérer ces ArrayCollection avec la méthode getReference(). J'obtient l'erreur suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Doctrine\Common\Persistence\Mapping\MappingException] The class 'Doctrine\Common\Collections\ArrayCollection' was not found in the chain configured namespaces KOS\PlatformBundle\Entity
    .. et je ne vois absolument pas ce que ça veut dire.
    Si quelqu'un peut m'aider à trouver une solution je lui serait reconnaissant, merci d'avance.

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
     
    // src/KOS/PlatformBundle/DataFixtures/ORM/LoadAdvert.php
     
    namespace KOS\PlatformBundle\DataFixtures\ORM;
     
    use Doctrine\Common\DataFixtures\AbstractFixture;
    use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
    use Doctrine\Common\Persistence\ObjectManager;
    use Doctrine\Common\Collections\ArrayCollection;
     
    use KOS\PlatformBundle\Entity\Advert;
     
    class LoadAdvert extends AbstractFixture implements OrderedFixtureInterface
    {
      public function load(ObjectManager $manager)
      {
     
        $adverts = new ArrayCollection();;	  
        $titles = array('PHP developer', 'Symfony developer', 'C++ expert', 'Java junior', 'Photoshop web', 'Blender', 'Webdesigner');
     
        foreach ($titles as $title) {
     
    		$ad = new Advert();
    		$ad->setTitle($title);
    		$ad->setAuthor("Pierre");
    		$ad->setContent("orem ipsum dolor sit amet, consectetur adipiscing elit...");
     
    		$manager->persist($ad);
    		$adverts->add($ad);
        }
     
        $this->addReference("adverts", $adverts);
     
        $manager->flush();
      }
     
      public function getOrder()
      {
    	  return 1;
      }
    }
     
    // src/KOS/PlatformBundle/DataFixtures/ORM/LoadSkill.php
     
    namespace KOS\PlatformBundle\DataFixtures\ORM;
     
    use Doctrine\Common\DataFixtures\AbstractFixture;
    use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
    use Doctrine\Common\Persistence\ObjectManager;
    use Doctrine\Common\Collections\ArrayCollection;
     
    use KOS\PlatformBundle\Entity\Skill;
     
    class LoadSkill extends AbstractFixture implements OrderedFixtureInterface
    {
      public function load(ObjectManager $manager)
      {
     
        $skills = new ArrayCollection();
     
        $names = array('PHP', 'Symfony', 'C++', 'Java', 'Photoshop', 'Blender', 'Bloc-note');
     
        foreach ($names as $name) {
     
          $skill = new Skill();
          $skill->setName($name);
     
          $manager->persist($skill);
          $skills->add($skill);
        }
     
        $this->addReference("skills", $skills);
     
        $manager->flush();
      }
     
      public function getOrder()
      {
    	  return 2;
      }
    }
     
    // src/KOS/PlatformBundle/DataFixtures/ORM/LoadAdvertSkill.php
     
    namespace KOS\PlatformBundle\DataFixtures\ORM;
     
    use Doctrine\Common\DataFixtures\AbstractFixture;
    use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
    use Doctrine\Common\Persistence\ObjectManager;
    use Doctrine\Common\Collections\ArrayCollection;
     
    use KOS\PlatformBundle\Entity\AdvertSkill;
     
    class LoadAdvertSkill extends AbstractFixture implements OrderedFixtureInterface
    {
      public function load(ObjectManager $manager)
      {
     
    	$adverts = $this->getReference("adverts")->toArray(); // .. génère une erreur
    	$skills = $this->getReference("skills")->toArray();   // .. génère une erreur
     
    	foreach($adverts as $ad)
    	{
    		$advertSkill = new AdvertSkill();
    		$advertSkill->setLevel('expert');
    		$advertSkill->setAdvert($ad);
     
    		foreach($skills as $skill)
    		{
    		    $advertSkill->setSkill($skill);
    		}
     
    		$manager->persist($advertSkill);
    	}
     
            $manager->flush();
      }
     
      public function getOrder()
      {
    	  return 3;
      }
    }

  2. #2
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut
    il manque une declaration dans une entité ?
    la declaration Arraycolllection

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2016
    Messages : 3
    Par défaut
    Salut, à quelle entité en particulier?
    Parce que j'ai bien mis cette déclaration (use Doctrine\Common\Collections\ArrayCollection dans les 3 entités Load du dossier DataFixtures.

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Par défaut
    Bonjour,
    l'exception est clair : use Doctrine\Common\Collections\ArrayCollection; // import manquant
    peut etre que c'est manquant dans les entités concernés.
    Encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $adverts = $this->getReference("adverts")->toArray(); // .. génère une erreur
    	$skills = $this->getReference("skills")->toArray();   // .. génère une erreur
    Sera mieux comme ça à mon avis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    use Doctrine\Common\Collections\ArrayCollection;
    //
    $advertsCollection= $this->getReference("adverts");
    if (!$advertsCollection instanceof ArrayCollection) {
          throw $this->createNotFoundException('adverts is not an ArrayCollection');
    }
    $adverts  =  $advertsCollection ->toArray(); 
    $skillsCollection= $this->getReference("skills");
    if (!$skillsCollectioninstanceof ArrayCollection) {
    throw $this->createNotFoundException('skills is not an ArrayCollection ');
    }
    $skills= $skillsCollection->toArray();

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2016
    Messages : 3
    Par défaut
    Merci pour vos réponses,, j'avais déja essayé d'inclure use Doctrine\Common\Collections\ArrayCollection; dans les entités concernées au cas où, à savoir ici Advert, Skill, AdvertSkill (du dossier Entity) mais sans plus de succès... Et juste pour tester d'instancier un objet ArrayCollection dans le fichier LoadAdvertSkill sans que cela pose problème.

    MehrezLabidi tes vérifications sont une bonne idée mais en fait la console plante dès le premier appel de la méthode getReference() avec le message d'erreur et c'est cela en particulier que je comprend pas ... Patience et longueur de temps ...

  6. #6
    Membre émérite
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Par défaut
    re-
    je propose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        (isset($this->getReference("adverts"))) ? $adverts = $this->getReference("adverts")->toArray() : $adverts = array();
       (isset($this->getReference("skills"))) ? $skills = $this->getReference("skills")->toArray() : $skills = array();
    au lieu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
       $adverts = $this->getReference("adverts")->toArray(); // .. génère une erreur
       $skills = $this->getReference("skills")->toArray();   // .. génère une erreur

    je vois aussi que selon la doc public function addReference($name, $object)// object $object - managed object
    or tu lui as donné une arraycollection d'objets

Discussions similaires

  1. [2.x] générer les entités de la base de données avec symfony2
    Par marwazmandar dans le forum Symfony
    Réponses: 157
    Dernier message: 04/07/2012, 16h59
  2. [2.x] Fomulaires avec plusieurs entitées liées
    Par hassentizi dans le forum Symfony
    Réponses: 2
    Dernier message: 01/03/2012, 13h45
  3. [XSLT 2.0] Générer plusieur HTML avec une page sommaire
    Par gormonius dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 26/01/2011, 09h19
  4. Générer plusieurs fichiers pdf avec pdflatex
    Par napo_lytech dans le forum Editeurs / Outils
    Réponses: 16
    Dernier message: 11/11/2010, 17h31
  5. [XL-2003] générer plusieurs graphiques doubles axes Y avec base de données variable
    Par didyvine dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/07/2009, 13h44

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