2014-05-12 2 views
0

J'ai actuellement une relation ManyToMany/ManyToMany entre une entité Tag et une entité Blog.Symfony2 - Problème d'accès aux balises d'une relation ManyToMany

La requête de la doctrine que je utilise est maintenant comme suit:

$qb = $this->createQueryBuilder('b') 
     ->select('b, c, t') 
     ->innerJoin('b.category', 'c') 
     ->innerJoin('b.tags', 't') 
     ->addOrderBy('b.created', 'DESC'); 

    return $qb->getQuery() 
     ->getResult(); 

Lorsque je tente d'accéder aux balises dans brindille avec les éléments suivants:

1) (les balises disparaissent et ne sont pas affichés)

{% for tag in blog %} 
    <p class="tag-links"><span>Tagged:</span> rel="tag">{{ tag.tags }}</a>, <a href="" rel="tag">Tag 2</p> 
{% endfor %} 

2) (sans la boucle - je reçois une erreur (ne pouvait pas être convertie en chaîne))

<p class="tag-links"><span>Tagged:</span> rel="tag">{{ tag.tags }}</a>, <a href="" rel="tag">Tag 2</p> 

contrôleur

public function indexAction() 
{ 
    $em = $this->getDoctrine()->getManager(); 

    $blogs = $em->getRepository('AcmeBundle:Blog') 
     ->getBlogs(); 

    return array(
     'blogs' => $blogs, 
    ); 
} 

Répondre

2

Votre boucle doit pointer vers la propriété balises de votre blog, pas l'entité blog lui-même.

{% for tag in blog.tags %} 

ou

{% for tag in blog.getTags() %} 

De plus vous ne devez pas se joindre à la catégorie et les balises parce que vous obtenez les entités de relations associées via les propriétés correspondantes de votre entité blog. ils seront chargés par proxy lorsque vous y accéderez dans votre modèle de brindille.

Je pense qu'il devrait être suffisant pour passer seulement BlogCollection à la vue, puis faire

{% for blog in blogs %} 
    {% for tag in blog.tags %} 
     ... 
    {% endfor %} 
{% endfor %} 
+0

Je vois la err de ma pensée. Merci Markus de m'avoir montré boucler blog.tags au lieu du blog. Essayait d'y accéder à partir de blog seulement. Je vous remercie. – Kincsem

Questions connexes