Page 1 sur 1

PHP Faker

Posté : 01 mars 2021, 13:52
par rjuan
Bonjour,
J'utilise phpFaker avec le framework Symfony 5 et je tombe sur un 'os':
Dans un fichier AppFixtures.php, je demande à faker de choisir parmi trois items : 'ancien', 'professeur' et 'contact' avec la commande :
$qualite = $faker->randomElement(['ancien', 'contact', 'professeur']);
Si je demande un dump() de la $qualite, j'obtiens :
^ "ancien"
soit une réponse cohérente.

Et si je demande :
$user->getQualite()
J'obtiens :
^ true
Dans tous les cas, sur ma base de données la commande rend la valeur true soit = 1.

Quelqu'un pourrait-il m'éclairer ?

Re: PHP Faker

Posté : 03 mars 2021, 13:15
par Ryle
Salutations !

Que fait la méthode getQualite() ? qu'elle retourne simplement l'attribut qualite de ton instance user ?
Si tel est le cas, à quel moment cet attribut est-il renseigné pour l'instance $user ?

$qualite est différent de $this->qualite, dans le premier cas c'est une variable, dans le second c'est un attribut de ta classe :)

Re: PHP Faker

Posté : 03 mars 2021, 15:34
par rjuan
Merci Ryle,
La méthode getQualite() retourne la propriété qualite de l'instance User.
La propriété est renseignée en fin d'extrait (ci-dessous) par la méthode setQualite() de User.

Voici le contexte, il s'agit de populariser une 'fake' base de données:
        for ($p = 1; $p < 50; $p++) {
            $user = new Personne;
            dump($user);

            $hash = $this->encoder->encodePassword($user, "password");
            $user->setTitre($faker->title($gender = 'male' | 'female'))
                ->setNom($faker->lastName())
                ->setPrenom($faker->firstName())
                ->setEntreeStjo($faker->numberBetween(1948, 1990))
                ->setSortieStjo($user->getEntreeStjo() + $faker->numberBetween(3, 7))
                ->setProfession($faker->jobTitle())
                ->setDateCreation($faker->dateTimeBetween('-6 months'))
                ->setDateMiseAJour($faker->dateTimeBetween('- 7 days'))
                ->setRefuseContact($faker->boolean(5))
                ->setRole("ROLE_USER")
                ->setEnvoiPapier($faker->boolean(1))
                ->setPassword($hash)
                ->setAdresse1($faker->streetAddress())
                ->setAdresse2($faker->secondaryAddress())
                ->setCodePostal($faker->postcode())
                ->setVille($faker->city())
                ->setPays($faker->country());
            $qualite = $faker->randomElement(['ancien', 'contact', 'professeur']);
            dump($qualite);

            $user->setQualite($qualite);
            dd($user);
Après l'instruction $user= new User, en début de script, un dump montre la propriété "qualite" : NULL (bien sûr l'objet est "neuf").
A la fin du script, le dump de "qualite" affiche bien une chaîne de caractères résultante de la commande randomElement (ex. professeur).
J'exécute ensuite la fonction setQualite de user pour lui attribuer la qualite obtenue (string).
Problème: le dump de user montre : qualite=true (cf. ci-dessous).
En base de données : 1
-avatarPersonne: null
  -envoiPapier: false
  -qualite: true

Re: PHP Faker

Posté : 03 mars 2021, 17:23
par Ryle
Tout semble logique au niveau de ton code. Il faudrait donc vérifier dans ta classe Personne, que l'attribut qualite est bien de type string et pas de type bool (ou n'est pas typé selon la façon dont tu code) et t'assurer que le setQualite() ne fait effectivement rien de plus de d'affecter la valeur spécifiée sans l'altérer :)

Re: PHP Faker

Posté : 03 mars 2021, 17:31
par rjuan
Dans l'entité Personne :
  /**
     * @ORM\Column(type="string", nullable=false)
     */
    private $qualite;
Dans la base :
Nom Type Interclassement Attributs Null Valeur par défaut
qualite varchar(255) utf8mb4_unicode_ci Non Aucun(e)

Enfin setQualite() :
   public function setQualite(?bool $qualite): self
    {
        $this->qualite = $qualite;

        return $this;
    }

Re: PHP Faker

Posté : 03 mars 2021, 17:35
par rjuan
çà y est j'est vu la bestiole : setQualite(?bool $qualite) !!! Le hic est dans a fonction !

Re: PHP Faker

Posté : 03 mars 2021, 17:36
par rjuan
Merci encore Ryle !
Comme quoi, ce qui est en face de nous peut-être invisible !!

Re: PHP Faker

Posté : 03 mars 2021, 17:38
par rjuan
TadaaaM !
-envoiPapier: false
  -qualite: "professeur"
  -password: "$argon2id$v=19$m=65536,t=4,p=1$hoYn9u2ColcNwakAoQUUrw$iB57aAxrXvtT2O6TArPYoCXATBvyvS3nU3OT3UVolxk"

Re: [RESOLU] PHP Faker

Posté : 04 mars 2021, 12:07
par Ryle
Cool !

Content que tu ais pu solutionner le problème :)