2017-08-31 4 views
1

J'ai une entité article et une autre entité Image avec une relation bidrectional OneToMany et ManyToOne:Quelle est la meilleure solution pour obtenir l'entité que je veux dans une relation OneToMany biderectional?

class Article 
{ 
    /** 
    * @ORM\OneToMany(targetEntity="AppBundle\Entity\Image", mappedBy="article") 
    */ 
    private $images; 
} 

class Image 
{ 
    /** 
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Article", inversedBy="images") 
    * @ORM\JoinColumn(nullable=true) 
    */ 
    private $article; 
} 

Dans mon contrôleur j'utilise @paramconverter pour obtenir l'article que je veux:

/** 
* @Route("/blog/{slug}", name="article") 
* @ParamConverter("article", class="AppBundle:Article") 
*/ 
public function articleAction(Article $article) 
{ 
    return $this->render('default/article.html.twig', array(
     'article' => $article, 
    )); 
} 

Maintenant, mon Le problème est que je veux identifier la seule image avec les attributs "main = true" dans tous les "article.images" que j'ai.

Quelle est la meilleure solution?

Dans mon wiew je peux faire somehting comme ça, mais ce n'est pas le meilleur que je pense:

{% for image in article.images %} 
    {% if image.main %} 
     <img src="{{ asset(image.src) }}" alt="{{ image.alt }}" title="{{ image.title }}"> 
    {% endif %} 
{% endfor %} 

Je voudrais utiliser quelque chose comme:

{{ article.mainImg }} 

Comment puis-je obtenir Ceci s'il vous plaît? Et est-ce la meilleure solution?

Répondre

2

Doctrine fournit un mécanisme de filtre de collection vous pouvez utiliser pour obtenir la "image principale":

public function articleAction(Article $article) 
{ 
    $criteria = Criteria::create() 
     ->where(Criteria::expr()->eq("main", true)) 
     ->setMaxResults(1); 

    $mainImg = $article->getImages()->matching($criteria)->first(); 
    return $this->render('default/article.html.twig', array(
     'article' => $article, 
     'mainImg' => $mainImg 
    )); 
} 

Plus d'informations sur les collections de la doctrine de filtrage: Filtering collections

Je n'ai pas testé le code moi-même, mais il devrait transmettre l'idée de comment cela peut être fait.

+0

Parfait merci! Je suis toujours un débutant Symfony et je ne connaissais pas grand-chose à ce genre de choses, je vais essayer de m'améliorer dans ce domaine :) Merci encore;) –