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

Doctrine2 PHP Discussion :

Select une valeur dans une entité et comparer


Sujet :

Doctrine2 PHP

  1. #1
    Membre du Club Avatar de JackSteller
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2019
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Janvier 2019
    Messages : 41
    Points : 43
    Points
    43
    Par défaut Select une valeur dans une entité et comparer
    Hello a tous
    J'ai du mal avec les requêtes étant novice sur Symfony et doctrine

    Ce que je voudrais faire c'est trouver la valeur d'une date de naissance entrée par l'utilisateur et lui de finir une génération.

    Exemple: l'user avec l'id 13 est né en 1984.

    génération 1: 1940 a 1970

    génération 2 : 1971 a 1989

    etc...


    mon entité abstraite ou je récupérè la réponse de l'user Nom : class answer.png
Affichages : 785
Taille : 4,1 Ko
    24 = id de la réponse , 13 = id de l'user , 2= id de la question, answerFree = une sous entité.


    Dans mon entité answerFree Nom : class asnwerfree.png
Affichages : 789
Taille : 6,1 Ko
    je veux pouvoir récupérer la valeur (ici : "1984")
    et faire mon traitement par la suite...


    Alors j'ai un un findById("24"); j'ai bien l'objet mais je voulais passer par une requête dql pour bien ciblé ce que je veux.

    j'ai essayer ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class Answer_freeRepository extends \Doctrine\ORM\EntityRepository
    {
        public function FindtrouverAge(){
          $em = $entityManager = $this->getEntityManager(); 
          $query = $em->createQuery('SELECT u 
          FROM QuestionBundle\Entity\Answer_free u 
          WHERE  u.id = 24');
     
           $query->getResult();
     
        }
     
     
    }
    et ensuite dans un contrôleur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $answerRepo = $this->getDoctrine()->getRepository(Answer_Free::class);
            $val = $answerRepo->FindtrouverAge();
            dump($val);

    cela retourne null je sais que je m'y prend mal merci de m'aider

  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,

    t'as null parce que la méthode FindtrouverAge ne retourne rien.

  3. #3
    Membre du Club Avatar de JackSteller
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2019
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Janvier 2019
    Messages : 41
    Points : 43
    Points
    43
    Par défaut
    j'ai pourtant une valeur en bdd

  4. #4
    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
    la méthode doit faire un return d'un tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public function FindtrouverAge(){
          $em = $entityManager = $this->getEntityManager(); 
          $query = $em->createQuery('SELECT u 
          FROM QuestionBundle\Entity\Answer_free u 
          WHERE  u.id = 24');
     
     return   $query->getResult(); 
     }

  5. #5
    Membre du Club Avatar de JackSteller
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2019
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Janvier 2019
    Messages : 41
    Points : 43
    Points
    43
    Par défaut
    j'arrive a avoir le tableau deja en faisant un findbyid("24") mais maintenant recupérer la valeur.comment?

    en faisant un foreach?

  6. #6
    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
    j'arrive a avoir le tableau deja en faisant un findbyid("24") mais maintenant recupérer la valeur.comment?

    en faisant un foreach?
    si tu es en Symfony 4, une classe de Repository hérite de ServiceEntityRepository

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    use App\Entity\MonEntite;
    use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
    use Symfony\Bridge\Doctrine\RegistryInterface;
     
    class ProductRepository extends ServiceEntityRepository
    {
        public function __construct(RegistryInterface $registry)
        {
            parent::__construct($registry, MonEntite::class);
        }
    }
    peut-tu poster le code de ton entité y compris son namespace ?

  7. #7
    Membre du Club Avatar de JackSteller
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2019
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Janvier 2019
    Messages : 41
    Points : 43
    Points
    43
    Par défaut
    alors non symfony 3.4 si jamais

    ici mon entité answer avec son repo

    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
    <?php
     
    namespace QuestionBundle\Entity;
     
    use Doctrine\ORM\Mapping as ORM;
     
    /**
     * Answer
     *
     * @ORM\Table(name="answer")
     * @ORM\Entity(repositoryClass="QuestionBundle\Repository\AnswerRepository")
     * @ORM\InheritanceType("JOINED")
     * @ORM\DiscriminatorColumn(name="discr", type="string")
     * @ORM\DiscriminatorMap({"answerScale" = "Answer_scale", "answerChoice" = "Answer_choice", "answerFree" = "Answer_free"})
     */
    abstract class Answer
    {
        /**
         * @var int
         *
         * @ORM\Column(name="id", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;
     
        /**
         *
         * @ORM\ManyToOne(targetEntity="AppBundle\Entity\UserSlp", inversedBy="answers")
         * @ORM\JoinColumn(name="user_slp_id", referencedColumnName="id")
         */
        private $userSlp;
     
        /**
         * @ORM\ManyToOne(targetEntity="Question")
         * @ORM\JoinColumn(name="question_id", referencedColumnName="id")
         */
        private $question;
     
        /**
         * Get id.
         *
         * @return int
         */
        public function getId()
        {
            return $this->id;
        }
     
        public function setUserSlp($user)
        {
            $this->userSlp = $user;
     
            return $this;
        }
     
        public function setQuestion($question)
        {
            $this->question = $question;
     
            return $this;
        }
     
        public function getQuestion()
        {
            return $this->question;
        }
     
        /**
         * Get userSlp.
         *
         * @return \AppBundle\Entity\UserSlp|null
         */
        public function getUserSlp()
        {
            return $this->userSlp;
        }
    }
    /**
     * AnswerRepository
     *
     * This class was generated by the Doctrine ORM. Add your own custom
     * repository methods below.
     */
    class AnswerRepository extends \Doctrine\ORM\EntityRepository
    {
     
       //l'ideal serait de recuperé depuis ici les valeurs de l'user..etant donné ques dans cette entité en bdd on a id || user_slp_id || question_id || discr (qui n'est la que pour designé dans quel sous table enregistrer la reponse.
    }
    du coup el s'enregistrera dans l'entité Answer_free
    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
    <?php
     
    namespace QuestionBundle\Entity;
     
    use Doctrine\ORM\Mapping as ORM;
    use QuestionBundle\Entity\Answer;
     
    /**
     * Answer_free
     *
     * @ORM\Table(name="answer_free")
     * @ORM\Entity(repositoryClass="QuestionBundle\Repository\Answer_freeRepository")
     */
    class Answer_free extends Answer
    {
        /**
         * @var int
         *
         * @ORM\Column(name="id", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;
     
        /**
         * @var string
         *
         * @ORM\Column(name="free_aswere", type="string", length=255)
         */
        private $freeAswere;
     
        /**
         * Get id.
         *
         * @return int
         */
        public function getId()
        {
            return $this->id;
        }
     
        /**
         * Set freeAswere.
         *
         * @param string $freeAswere
         *
         * @return Answer_free
         */
        public function setFreeAswere($freeAswere)
        {
            $this->freeAswere = $freeAswere;
     
            return $this;
        }
     
        /**
         * Get freeAswere.
         *
         * @return string
         */
        public function getFreeAswere()
        {
            return $this->freeAswere;
        }
     
        public function __toString()
        {
            return "free";
        }
    } 
     
    //ici le repo
     
    /**
     * Answer_freeRepository
     *
     * This class was generated by the Doctrine ORM. Add your own custom
     * repository methods below.
     */
    class Answer_freeRepository extends \Doctrine\ORM\EntityRepository
    {
     
       public function FindtrouverAge(){
     
          $em = $entityManager = $this->getEntityManager(); 
          $query = $em->createQuery('SELECT u.freeAswere
          FROM QuestionBundle\Entity\Answer_free u 
          WHERE  u.id = 24 ');
     
         return  $query->getResult(); 
       }
     
       //avec cette requete je récupere un objet "freeAswere" et je fais un foreach pour avoir valeur liée a l'id  24 "1984". 
       mais le soucis c'est que comment je peu lié cela a mon user dois-je ajouter une collonne "user" dans answer_free sachant qu'elle extend de answer qui elle a déja une colonne"user"
    }
    j'ai commenter dans le code directement pour savoir ce que je veux faire
    dois-je passer par une jointure dans ma requete genre (va recuperer (la réponse avec l'id 24 ) de l'utulisateur en cours..mais en sql suis une vrai bille désolé

  8. #8
    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
    mais le soucis c'est que comment je peu lié cela a mon user dois-je ajouter une collonne "user" dans answer_free sachant qu'elle extend de answer qui elle a déja une colonne"user"
    Sauf que la propriété $userSlp est privée, donc sa visibilité est limitée à la classe mère. Pour le coup la faire passer à protected permettra aux classes filles d’accéder à ladite propriété car doctrine ne manipule que les champs de la classe.

    Pour tester une requête dql en ligne de commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    php bin/console doctrine:query:dql "SELECT A,U FROM QuestionBundle\Entity\Answer_free A JOIN A.userSlp  U  WHERE  u.id = 24"

  9. #9
    Membre du Club Avatar de JackSteller
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2019
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Janvier 2019
    Messages : 41
    Points : 43
    Points
    43
    Par défaut
    Nom : test.png
Affichages : 738
Taille : 33,3 Ko

    j'ai passé l'userslp en protected j'ai cette erreur

  10. #10
    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
    une coquille! le U de la condition where est en majuscule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    php bin/console doctrine:query:dql "SELECT A,U FROM QuestionBundle\Entity\Answer_free A JOIN A.userSlp  U  WHERE  U.id = 24"

  11. #11
    Membre du Club Avatar de JackSteller
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2019
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Janvier 2019
    Messages : 41
    Points : 43
    Points
    43
    Par défaut
    du coup cela fonctionne mais elle me retourne un tableau de tous ce que l'user contient ou du moins est en lien

    Nom : test2.png
Affichages : 806
Taille : 59,2 Ko....

  12. #12
    Membre du Club Avatar de JackSteller
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2019
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Janvier 2019
    Messages : 41
    Points : 43
    Points
    43
    Par défaut
    Du coup j'ai résolu le problème sur ma vue twig en conditionnant dans les boucles merci beaucoup

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

Discussions similaires

  1. select 2 valeurs dans un champ
    Par pimpmyride dans le forum Requêtes
    Réponses: 2
    Dernier message: 21/07/2008, 17h22
  2. [Interbase] Récupérer une valeur dans un select
    Par ftoutin dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 09/01/2007, 13h36
  3. Utiliser une liste de valeur dans un select
    Par in dans le forum Oracle
    Réponses: 13
    Dernier message: 09/01/2007, 11h33
  4. récupérer une valeur dans un selected
    Par lacfab dans le forum Langage
    Réponses: 6
    Dernier message: 14/12/2005, 09h48
  5. Selection d'une valeur dans une autre table
    Par beurnoir dans le forum Access
    Réponses: 1
    Dernier message: 13/10/2005, 12h02

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