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 :

Fixtures sur 2 valeurs ne fonctionne pas


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 134
    Par défaut Fixtures sur 2 valeurs ne fonctionne pas
    Bonjour à tous,

    Je cherche à mettre en place des fixtures sur les entités "Intervenants" et "TypesIntervenants" qui sont en relation ManyToOne sachant que je voudrais que "Intervenants" ait soit "Vendeur" soit "Intervenant" comme valeur aléatoire...

    J'ai essayé en mettant en place les fixtures ci-joint mais une erreur "type_intervenant_1" ou "type_intervenant_2" does not exists alors que celui-ci est bien en base...

    Il faut qu'un intervenant ait l'ID d'un type d'intervenant existant dans la base de façon à ce que la relation perdure entre eux...

    Je pense me tromper d'approche quelque part...

    Merci d'avance pour vos conseils avisés...

    TypesIntervenantsFixtures.php :

    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
    namespace App\DataFixtures;
     
    use App\Entity\TypesIntervenants;
    use Doctrine\Bundle\FixturesBundle\Fixture;
    use Doctrine\Persistence\ObjectManager;
     
    class TypesIntervenantsFixtures extends Fixture
    {
        public function load(ObjectManager $manager): void
        {
            $type = new TypesIntervenants();
     
            $type->setTypeIntervenant("Vendeur");
            $this->addReference('type_intervenant_1', $type);
            $manager->persist($type);
     
     
            $type = new TypesIntervenants();
     
            $type->setTypeIntervenant("Intervenant");
            $this->addReference('type_intervenant_2', $type);
            $manager->persist($type);
     
            $manager->flush();
        }
    }
    IntervenantsFixture.php :

    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
    <?php
     
    namespace App\DataFixtures;
     
    use App\Entity\Intervenants;
    use Doctrine\Bundle\FixturesBundle\Fixture;
    use Doctrine\Persistence\ObjectManager;
    use Faker;
     
     
    class IntervenantsFixtures extends Fixture
    {
        public function load(ObjectManager $manager): void
        {
            $faker = Faker\Factory::create("fr_FR");
     
            for ($i = 0; $i <= 10; $i++) {
     
                $int = new Intervenants();
     
                $int
                    ->setCodeIntervenant(random_int(001, 010))
                    ->setIntervenant($faker->firstName() . ' ' . $faker->lastName())
                    ->setCodeNan(random_int(000000001, 000000010))
                    ->setRoleIntervenant($this->getReference('type_intervenant_' . rand(1, 2)));
     
                $manager->persist($int);
                $manager->flush();
            }
        }
     
        public function getDependencies()
        {
            return [
                TypesIntervenantsFixtures::class
            ];
        }
    }

  2. #2
    Membre émérite
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    441
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2021
    Messages : 441
    Par défaut
    Bonjour,

    Ta classe IntervenantsFixtures doit implémenter l'interface DependentFixtureInterface : https://symfony.com/bundles/Doctrine...files-in-order

    Je constate toujours les mêmes erreurs de nommage dans tes codes :
    - les entités devraient être au singulier et pas au pluriel (chaque instance représente un intervenant ou un type)
    - inutile de remettre le nom de l'entité pour les méthodes : TypeIntervenant::setTypeIntervenant() pourrait être renommé TypeIntervenant::setType() ou TypeIntervenant::setName(), Intervenant::setCodeIntervenant() en Intervenant::setCode(), Intervenant::setRoleIntervenant() en Intervenant::setRole(), etc...
    - au passage, tu peux exécuter ton flush après ta boucle for pour la fixture des intervenants

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 134
    Par défaut
    Merci Pytet pour ta réponse

    En effet un "use" s'est fait la malle , d'ailleurs je comprends pas pourquoi aucune erreur en faisant mention n'apparait dans le code contrairement à ce qui se passe dans les contrôleurs qui eux soulignent en rouge les classes non reconnues...
    Concernant le singulier/pluriel et les répétitions, c'est juste une habitude par rapport à ce que je vois dans les tutos je n'ai pas d'inconvénient à changer cela... Merci de me l'avoir signalé car moi aussi je trouve ça lourd !

    Il y a déjà tellement de conventions à apprendre par coeur dans ce framework , comme le nommage des routes par exemple (préfixer par "app_" ou pas, se servir de tel ou tel séparateur, etc ... !

    Tiens au fait, il doit bien y avoir moyen de tester une fixture toute seule sans avoir besoin de les éxécuter toutes non ? Je suis trop débutant, j'ai pas encore essayé les tests (en dehors des dumps évidement)! ...

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

Discussions similaires

  1. [WD12] SQLExec sur BD Paradox ne fonctionne pas
    Par claude dans le forum WinDev
    Réponses: 19
    Dernier message: 13/03/2009, 09h21
  2. Réponses: 0
    Dernier message: 09/09/2008, 14h12
  3. Un lien sur un calque ne fonctionne pas sous Firefox
    Par beegees dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 11/10/2007, 22h01
  4. Hover sur une image ne fonctionne pas
    Par adrix26 dans le forum Mise en page CSS
    Réponses: 9
    Dernier message: 08/08/2007, 17h54
  5. Un Hint sur un PopupMenu ne fonctionne pas !!??
    Par momox dans le forum C++Builder
    Réponses: 6
    Dernier message: 26/05/2003, 16h48

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