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 :

Créer référence fixtures avec données réelles impossible ?


Sujet :

Symfony PHP

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 126
    Par défaut Créer référence fixtures avec données réelles impossible ?
    Bonjour à tous

    J'aimerai savoir si il y a moyen de pouvoir utiliser des données réelles lors d'une création de fixtures qui auraient une relation entre une/plusieurs entités :

    Dans mon cas précis j'ai créé une entité "Marques" et une autre "Véhicules" (ManyToOne, voir ci-dessous) qui marchaient bien tant qu'elles n'étaient pas en relation ...

    De ce que je comprends il n'est pas possible de faire un setMarque() dans VehiculesFixtures en prenant une valeur random de la fixture MarquesFixtures ?
    On est obligé de passer par un set/get reference + $i avec un nom bidon genre "ma_marque + $i" ?

    Que dois-je mettre comme valeur dans $v->setMarque() vu qu'il n'accepte plus de string?

    Merci d'avance pour votre aide

    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
    <?php
     
    namespace App\DataFixtures;
     
    use App\Entity\Marques;
    use Doctrine\Bundle\FixturesBundle\Fixture;
    use Doctrine\Persistence\ObjectManager;
     
    class MarquesFixtures extends Fixture
    {
        public function load(ObjectManager $manager): void
        {
            $tblMarques=['Alfa-Romeo','Aston-Martin','Bentley','BMW','Citroen','DS automobiles','Jaguar','Mercedes','Peugeot','Renault','Rolls-Royce','Toyota','Volkswagen'];
     
            for($i=0;$i<count($tblMarques);$i++){
     
            $marque = new Marques();
     
            $manager->persist($marque);
            $manager->flush();}
        }
    }
    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
     
    <?php
     
    namespace App\DataFixtures;
     
    use App\DataFixtures\Fixtures;
    use App\Entity\Vehicules;
    use Doctrine\Bundle\FixturesBundle\Fixture;
    use Doctrine\Persistence\ObjectManager;
    use Symfony\Component\Validator\Constraints\Length;
     
    class VehiculesFixtures extends Fixture
    {
     
        public function load(ObjectManager $manager)
        {
            $tblMarques = ['Alfa-Romeo', 'Aston-Martin', 'Bentley', 'BMW', 'Citroen', 'DS automobiles', 'Jaguar', 'Mercedes', 'Peugeot', 'Renault', 'Rolls-Royce', 'Toyota', 'Volkswagen'];
     
            $motorisations = ["Diesel", "Essence", "GPL", "Hybride", "Electrique"];
            $types = ["Fourgonnette", "Familiale", "Citadine", "Véhicule entreprise", "Véhicule industriel", "Camionnette"];
            $boites = ["Manuelle", "Auto"];
     
            $lengthMarques = count($tblMarques);
            $lengthMotorisations = count($motorisations);
            $lengthTypes = count($types);
            $lengthBoites = count($boites);
     
            for ($i = 0; $i <= 10; $i++) {
     
                //Random sur les valeurs des tableaux fictifs
                $randomMarques = rand(0, $lengthMarques - 1);
                $randomMotorisations = rand(0, $lengthMotorisations - 1);
                $randomTypes = rand(0, $lengthTypes - 1);
                $randomBoites = rand(0, $lengthBoites - 1);
     
                //Random sur les dates
                // $timestamp = rand(strtotime("Jan 01 2015"), strtotime("Nov 01 2023"));
                // $random_Date = new \DateTime("d-m-Y",);
     
                $v = new Vehicules();
                $v->setMarque('coucou')
                    ->setModele("nc")
                    ->setCouleur('blanche')
                    ->setMotorisation($motorisations[$randomMotorisations])
                    ->setTypeVehicule($types[$randomTypes])
                    ->setBoite($boites[$randomBoites])
                    ->setCylindree(rand(1000, 5600))
                    ->setNbPlaces(rand(1, 10))
                    ->setNbPortes(rand(2, 5))
                    ->setPrixVente(rand(3500, 300000))
                    ->setKilometrage(rand(1000, 200000))
                    ->setChevauxDin(rand(1, 1000))
                    ->setChevauxFiscaux(10.00, 400.00);
                // $v->setDateMiseEnCirculation($random_Date);
                // $v->setDateMiseEnVente($random_Date);
     
                $manager->persist($v);
            }
     
            $manager->flush();
        }
    }

  2. #2
    Membre émérite
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    435
    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 : 435
    Par défaut
    Bonjour,

    Oui il faut utiliser les références d'objet pour partager des objets entre tes fixtures : utiliser addReference() lors de la création de l'objet Marque et utiliser getReference() pour récupérer cet objet lors de la création l'objet Vehicle.
    https://symfony.com/bundles/Doctrine...tween-fixtures
    Voir la classe AppFixtures du projet Symfony Demo pour exemple : https://github.com/symfony/demo/blob...ppFixtures.php

    Au passage, idéalement les entités son nommés au singulier, le pluriel est ajouté automatiquement par le maker sur les propriétés lorsqu'on utilise des relations ManyToOne ou ManyToMany.

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 126
    Par défaut
    Bonjour et merci Pytet

    Je connaissais le principe des references...
    J'ai réussi à faire ce que je voulais en rajoutant un random dans la reference, chose à laquelle je n'avais pas pensé hier soir ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
           ->setProprietaire($this->getReference('Client_'.rand(1,3)))
                    ->setMarque($this->getReference('Marque_' . rand(1,$randomMarques-1)))
    D'ailleurs si je peux me permettre 2 petites questions :

    1/ Peut on indiquer des steps dans un rand() ?.

    2/ Il semble que faker soit définitivement abandonné, sniiifff ..., impossible de l'installer depuis composer, existe il une alternative (avec images si possible) stp ?

    Merci d'avance

  4. #4
    Membre émérite
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    435
    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 : 435
    Par défaut
    Je n'ai pas compris la première question dans ton dernier message.

    Faker a été remplacé par Alice.
    Pour utiliser Alice dans Symfony, tu peux installer via composer la dépendance de dév hautelook/alice-bundle
    https://github.com/theofidry/AliceBundle

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 126
    Par défaut
    Bonjour Pytet,

    Je m'explique concernant la fonction random avec des steps :

    Il me semblait que dans certains langages de programmation on pouvait creer des random avec indication de pas, c'est à dire par exemple faire rand(10,1000,10) le dernier argument étant le pas que l'on veut appliquer comme dans une boucle...
    Autrement dit le résultat ne serait jamais quelque chose d'inférieur à 10 et pourrait être 20 ou 110 ou 150 mais pas 121 ou 139...

    Si ce n'est le cas en une seule étape je suppose qu'il faut appliquer une autre fonction au résultat du random pour l'arrondir à ce que l'on veut ?

    Merci pour ton info concernant Alice, je vais voir ça...

  6. #6
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 325
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 325
    Billets dans le blog
    17
    Par défaut
    Pour obtenir des dizaines entre 10 et 1000 tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ref = random_int(1, 100) * 10;

Discussions similaires

  1. Réponses: 0
    Dernier message: 03/06/2022, 17h29
  2. [XL-2010] créer fichiers excel avec données différentes nommées selon liste
    Par SG6216 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 05/05/2016, 10h42
  3. [Tableaux] créer un lien avec donnée de formulaire
    Par samy be good dans le forum Langage
    Réponses: 5
    Dernier message: 10/04/2007, 14h23
  4. Réponses: 1
    Dernier message: 24/05/2006, 18h29
  5. Créer du xml avec des données Oracle
    Par Baumont dans le forum Oracle
    Réponses: 3
    Dernier message: 23/11/2005, 15h35

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