La Ferme du web - Les forums

Venez baraguiner avec la communauté !

Vous n'êtes pas identifié.

#1 13/06/2013 11:59:32

dribeyre
Membre
Date d'inscription: 28/05/2013
Messages: 6

Boucle imbriquée

Bonjour,

j'ai une première boucle affichant une liste d'information, jusque là aucun problème. Mais pour chaque information j'ai une liste de pièces jointes et là je ne comprends pas comment faire le lien dynamiquement avec l'id de l'information.

Dans le repository pour les pièces jointes j'ai écris la requête suivante :

Code:

    public function listePiecesJointes($id)
    {
        $qb = $this->createQueryBuilder('ipj')
               ->join('ipj.information', 'i')
               ->addSelect('i');
               
        $qb->where('ipj.information = :id')
            ->setParameter('id', $id)
            ->orderBy('ipj.ordre')
            ->orderBy('ipj.idinformationsdocumentsjoints');
            
        return $qb->getQuery()
                  ->getResult();
    }

Dans le controlleur je traite d'abord l'affichage des offres :

Code:

        $liste_offres = $this->getDoctrine()
                           ->getEntityManager()
                           ->getRepository('SiteAccueilBundle:Informations')
                           ->offresCommerciales();

puis l'affichage des pièces jointes :

Code:

        $liste_pieces_jointes = $this->getDoctrine()
                           ->getEntityManager()
                           ->getRepository('SiteAccueilBundle:Informationsdocumentsjoints')
                           ->listePiecesJointes($id);

bien sur ça ne marche pas par contre si dans le controlleur je remplace $id par un chiffre en dur tout fonctionne.

Comment lier dynamiquement la deuxième boucle à la première par son id ?

Hors ligne

 

13/06/2013 11:59:32

Botte De Foin Publicitaire


#2 17/06/2013 11:35:25

dribeyre
Membre
Date d'inscription: 28/05/2013
Messages: 6

Re: Boucle imbriquée

Je suis arrivé à afficher mes pièces jointes en m'y prenant autrement. Plus besoin de faire une requête dans le repository de la table des pièces jointes. Je récupère mes pièces jointes directement depuis mes offres. Pour cela j'ai modifié mon entité "informations":

- j'ai créé une propriété pièce jointe

Code:

    
/**
 * @ORM\OneToMany(targetEntity="Site\AccueilBundle\Entity\Informationsdocumentsjoints", mappedBy="information", cascade={"remove", "persist"})
 */
private $piecesjointes;

- j'ai créé les getter et setter :

Code:

    
/**
     * Add piecesjointes
     *
     * @param \Site\AccueilBundle\Entity\Informationsdocumentsjoints $piecesjointes
     * @return Informations
     */
    public function addPiecesjointe(\Site\AccueilBundle\Entity\Informationsdocumentsjoints $piecesjointes)
    {
        $this->piecesjointes[] = $piecesjointes;
     
        return $this;
    }
 
    /**
     * Remove piecesjointes
     *
     * @param \Site\AccueilBundle\Entity\Informationsdocumentsjoints $piecesjointes
     */
    public function removePiecesjointe(\Site\AccueilBundle\Entity\Informationsdocumentsjoints $piecesjointes)
    {
        $this->piecesjointes->removeElement($piecesjointes);
    }
 
    /**
     * Get piecesjointes
     *
     * @return \Doctrine\Common\Collections\Collection
     */
    public function getPiecesjointes()
    {
        return $this->piecesjointes;
    }

j'ai aussi renseigné le constructeur :

Code:

    
/**
 * Constructor
 */
public function __construct()
{
    $this->piecesjointes = new \Doctrine\Common\Collections\ArrayCollection();
}

dans l'entité "pièces jointes" j'ai renseigné la propriété information :

Code:

    
/**
* @ORM\ManyToOne(targetEntity="Site\AccueilBundle\Entity\Informations" , inversedBy="piecesjointes")
* @ORM\JoinColumn(name="IdInformations", referencedColumnName="IdInformations", nullable=false)
 */
private $information;

voici le code mon controleur :

Code:

public function indexAction()
{
    $liste_informations = $this->getDoctrine()
                               ->getEntityManager()
                               ->getRepository('SiteAccueilBundle:Informations')
                               ->dixDernieresInfos();
                                
    $liste_offres = $this->getDoctrine()
                       ->getEntityManager()
                       ->getRepository('SiteAccueilBundle:Informations')
                       ->offresCommerciales();
     
    return $this->render('SiteAccueilBundle:Accueil:index.html.twig', array('liste_informations' => $liste_informations,'liste_offres' => $liste_offres ));
}

et dans mon template j'ai fais une boucle pour les pièces jointes :

Code:

    
{% for offre in liste_offres %}
...
...
      {% for pj in offre.piecesjointes %}
        <br /><a class={{class}} href="{{ pj.chemin }}" >{{ pj.description }}</a>
      {% endfor %} 
...
{% endfor %}

Hors ligne

 

Pied de page des forums

Powered by FluxBB
© Copyright 2008-2009 - LaFermeduWeb.net