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 :

queryBuilder jointures qui disparaissent


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2014
    Messages : 124
    Par défaut queryBuilder jointures qui disparaissent
    J'ai fait une simple requete et mes jointures disparaissent.

    ça devient un array et non plus un objet donc comment lire ses jointures d'une requete queryBuilder

    la dans l'exemple j'ai l'id et le nom du fichier mais pas l'users ni le concours
    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 blogBundle\Entity;
     
    /**
     * filesRepository
     *
     * This class was generated by the Doctrine ORM. Add your own custom
     * repository methods below.
     */
    class filesRepository extends \Doctrine\ORM\EntityRepository
    {
    	public function myFindAll()
    	{
    		return $this->createQueryBuilder('a')
    		 // ->select('COUNT(a)')
    		 ->groupBy('a.users')
    		 ->getQuery()
    		 ->getScalarResult();
    	}
    }
    mon entité

    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
    124
    125
    126
    127
     
    <?php
     
    namespace blogBundle\Entity;
     
    use Doctrine\ORM\Mapping as ORM;
     
    use Symfony\Component\Validator\Constraints as Assert;
     
    /**
     * files
     *
     * @ORM\Table()
     * @ORM\Entity(repositoryClass="blogBundle\Entity\filesRepository")
     */
    class files
    {
        /**
         * @var integer
         *
         * @ORM\Column(name="id", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;
     
        /**
         * @var string
         *
         * @ORM\Column(name="fichier", type="string", length=255)
         * @Assert\NotBlank(message="Please, upload the product brochure as a PDF file.")
         * @Assert\File(mimeTypes={ "application/pdf", "text/plain", "application/vnd.openxmlformats-officedocument.wordprocessingml.document" })
         */
        private $fichier;
     
        /**
         * @ORM\ManyToOne(targetEntity="concours")
         */
        private $concours;
     
        /**
         * @ORM\ManyToOne(targetEntity="loginBundle\Entity\user")
         */
        private $users;
     
        /**
         * Get id
         *
         * @return integer
         */
        public function getId()
        {
            return $this->id;
        }
     
        /**
         * Set fichier
         *
         * @param string $fichier
         *
         * @return files
         */
        public function setFichier($fichier)
        {
            $this->fichier = $fichier;
     
            return $this;
        }
     
        /**
         * Get fichier
         *
         * @return string
         */
        public function getFichier()
        {
            return $this->fichier;
        }
     
        /**
         * Set concours
         *
         * @param \blogBundle\Entity\concours $concours
         *
         * @return files
         */
        public function setConcours(\blogBundle\Entity\concours $concours = null)
        {
            $this->concours = $concours;
     
            return $this;
        }
     
        /**
         * Get concours
         *
         * @return \blogBundle\Entity\concours
         */
        public function getConcours()
        {
            return $this->concours;
        }
     
        /**
         * Set users
         *
         * @param \loginBundle\Entity\user $users
         *
         * @return files
         */
        public function setUsers(\loginBundle\Entity\user $users = null)
        {
            $this->users = $users;
     
            return $this;
        }
     
        /**
         * Get users
         *
         * @return \loginBundle\Entity\user
         */
        public function getUsers()
        {
            return $this->users;
        }
    }
    J'ai utilisé du dql comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    	public function myFindAll()
    	{
    		$query = $this->_em->createQuery('SELECT a FROM blogBundle:files a group by a.users');
      		$results = $query->getResult();
     
                    return $results;
    	}
    alors pourquoi la méthode queryBuilder ne prend elle pas les colonnes de jointure?

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2010
    Messages : 21
    Par défaut Il faut select !
    Bonjour

    Il faut select les entités que vous voulez qu'il retourne. Sans le select, si vous hydratez en scalar ou array, elles n'y seront pas, et si vous hydratez en objet, elles seront en "lazy load", cad qu'il fera le select derrière votre dos dès votre premier accès à la sous-entité.

    Donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $this->createQueryBuilder('a')
    		 // ->select('COUNT(a)')
    		->addSelect('u') // C'est là qu'on lui dit de récupérer les champs de la table "u" (a.users)
    		->innerJoin('a.users', 'u') // Ou LeftJoin si il peut ne pas y en avoir, mais c'est un poil moins optimisé
    		 ->groupBy('u.id') // Vu qu'on a le join, ça lui évite d'avoir à le deviner
    		 ->getQuery()
    		 ->getScalarResult();

Discussions similaires

  1. [Cookies] Sessions qui disparaissent
    Par schnito dans le forum Langage
    Réponses: 31
    Dernier message: 22/12/2006, 11h15
  2. [swing][JButton] Des boutons qui disparaissent!
    Par soulhouf dans le forum Débuter
    Réponses: 12
    Dernier message: 19/08/2005, 12h51
  3. Avertissements / Conseils qui disparaissent
    Par Mikol dans le forum EDI
    Réponses: 7
    Dernier message: 28/07/2005, 18h08
  4. [C#] Des 0 qui disparaissent
    Par GéniuS77 dans le forum Windows Forms
    Réponses: 17
    Dernier message: 25/01/2005, 13h41
  5. [SQL] Requête à jointure qui ne fonctionne pas
    Par Bensor dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/12/2004, 16h10

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