Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Symfony] Sélectionner les enfants Query Builder

    26 juillet 2017 à 17:21:43

    Bonjour à tous,

    Je cherche à lister à l'aide d'un champ EntityType la liste de mes images par leur attribut title.

    Je fais ma requête sur le parent (entité Galerie) pour la récupérer, et j'aimerais pouvoir récupérer tous ses enfants (entité image) et les afficher grâce à leur attribut title, mais je n'arrive pas à y accéder 

    Ce que je veux pourrais être représenté par cette requête, j'ai juste du mal avec le Query Builder, si une âme charitable peut m'aider :ange:

    SELECT image.title
    FROM AdminBundle:Galerie galerie
    JOIN AdminBundle:Image image ON image.galerie_id = galerie.id;





    Mon formulaire :

    ->add('tissus', EntityType::class, array(
                    'class' => 'AdminBundle:Galerie',
                    'query_builder' => function(EntityRepository $er) 
                        {
                            return $er
                                    ->createQueryBuilder('u')
                                    ->where("u.titre = 'tissus'");
                        },
                    'choice_label' => 'title',
                    ))

    Mon entité Galerie 

    <?php
    
    namespace AdminBundle\Entity;
    
    use Doctrine\ORM\Mapping as ORM;
    
    /**
     * Galerie
     *
     * @ORM\Table(name="ys_galerie")
     * @ORM\Entity(repositoryClass="AdminBundle\Repository\GalerieRepository")
     */
    class Galerie
    {
        /**
         * @var int
         *
         * @ORM\Column(name="id", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;
    
        /**
         * @var string
         *
         * @ORM\Column(name="titre", type="string", length=200)
         */
        private $titre;
    
        /**
         * @ORM\OneToMany(targetEntity="AdminBundle\Entity\Image", mappedBy="galerie", cascade={"persist"})
         * @ORM\JoinColumn(nullable=true)
         */
        public $images;
    
    
        /**
         * Get id
         *
         * @return int
         */
        public function getId()
        {
            return $this->id;
        }
    
        /**
         * Set titre
         *
         * @param string $titre
         *
         * @return Galerie
         */
        public function setTitre($titre)
        {
            $this->titre = $titre;
    
            return $this;
        }
    
        /**
         * Get titre
         *
         * @return string
         */
        public function getTitre()
        {
            return $this->titre;
        }
        /**
         * Constructor
         */
        public function __construct()
        {
            $this->images = new \Doctrine\Common\Collections\ArrayCollection();
        }
    
        /**
         * Add image
         *
         * @param \AdminBundle\Entity\Image $image
         *
         * @return Galerie
         */
        public function addImage(\AdminBundle\Entity\Image $image)
        {
            $this->images[] = $image;
    
            $image->setGalerie($this);
    
            return $this;
        }
    
        /**
         * Remove image
         *
         * @param \AdminBundle\Entity\Image $image
         */
        public function removeImage(\AdminBundle\Entity\Image $image)
        {
            $this->images->removeElement($image);
        }
    
        /**
         * Get images
         *
         * @return \Doctrine\Common\Collections\Collection
         */
        public function getImages()
        {
            return $this->images;
        }
    }
    

    Mon entité Image

    <?php
    
    namespace AdminBundle\Entity;
    
    use Doctrine\ORM\Mapping as ORM;
    
    /**
     * Image
     *
     * @ORM\Table(name="ys_image")
     * @ORM\Entity(repositoryClass="AdminBundle\Repository\ImageRepository")
     */
    class Image
    {
        /**
         * @var int
         *
         * @ORM\Column(name="id", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;
    
        /**
         * @var string
         *
         * @ORM\Column(name="image", type="string", length=50, nullable=true)
         */
        private $image;
    
        /**
         * @var string
         *
         * @ORM\Column(name="alt", type="string", length=150, nullable=true)
         */
        private $alt;
    
        /**
         * @var string
         *
         * @ORM\Column(name="title", type="string", length=150, nullable=true)
         */
        private $title;
    
        /**
         * @var tinyint
         *
         * @ORM\Column(name="position", type="smallint", nullable=true)
         */
        private $position;
    
        /**
        *
        * @ORM\ManyToOne(targetEntity="AdminBundle\Entity\Galerie", inversedBy="images")
        * @ORM\JoinColumn(nullable=true, name="galerie_id", referencedColumnName="id")
        */
        public $galerie; 
    
        /**
         * Get id
         *
         * @return int
         */
        public function getId()
        {
            return $this->id;
        }
    
        /**
         * Set image
         *
         * @param string $image
         *
         * @return Image
         */
        public function setImage($image)
        {
            $this->image = $image;
    
            return $this;
        }
    
        /**
         * Get image
         *
         * @return string
         */
        public function getImage()
        {
            return $this->image;
        }
    
        /**
         * Set alt
         *
         * @param string $alt
         *
         * @return Image
         */
        public function setAlt($alt)
        {
            $this->alt = $alt;
    
            return $this;
        }
    
        /**
         * Get alt
         *
         * @return string
         */
        public function getAlt()
        {
            return $this->alt;
        }
    
        /**
         * Set title
         *
         * @param string $title
         *
         * @return Image
         */
        public function setTitle($title)
        {
            $this->title = $title;
    
            return $this;
        }
    
        /**
         * Get title
         *
         * @return string
         */
        public function getTitle()
        {
            return $this->title;
        }
    
        /**
         * Set position
         *
         * @param integer $position
         *
         * @return Image
         */
        public function setPosition($position)
        {
            $this->position = $position;
    
            return $this;
        }
    
        /**
         * Get position
         *
         * @return integer
         */
        public function getPosition()
        {
            return $this->position;
        }
    
        /**
         * Set galerie
         *
         * @param \AdminBundle\Entity\Galerie $galerie
         *
         * @return Image
         */
        public function setGalerie(\AdminBundle\Entity\Galerie $galerie)
        {
            $this->galerie = $galerie;
    
            return $this;
        }
    
        /**
         * Get galerie
         *
         * @return \AdminBundle\Entity\Galerie
         */
        public function getGalerie()
        {
            return $this->galerie;
        }
    }
    





    -
    Edité par guillaumeesnault 26 juillet 2017 à 17:27:48

    • Partager sur Facebook
    • Partager sur Twitter
      27 juillet 2017 à 11:48:44

      Je me permets de up,

      j'avance un peu cependant je suis toujours confronté à une erreur

      Cannot access private property AdminBundle\Entity\Image::$id

      Voici ma requête

      'query_builder' => function(EntityRepository $er) 
                          {
                              return $er
                                      ->createQueryBuilder('u')
                                      ->select('n')
                                      ->leftJoin('AdminBundle:Image', 'n', 'WITH', 'n.galerie = u.id')
                                      ->where("u.titre = 'tissus'");
                          },



      • Partager sur Facebook
      • Partager sur Twitter

      [Symfony] Sélectionner les enfants Query Builder

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown