我有一个实体文章和另一个实体具有双向关系的图像OneToMany和ManyToOne:
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;
}
在我的控制器中,我使用@paramconverter来获取我想要的文章:
/**
* @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,
));
}
现在我的问题是我想要识别具有属性的唯一图像" main = true"在所有" article.images"我有。
什么是最佳解决方案?
在我看来,我可以做这样的事情,但这不是我想的最好的事情:
{% for image in article.images %}
{% if image.main %}
<img src="{{ asset( image.src ) }}" alt="{{ image.alt }}" title="{{ image.title }}">
{% endif %}
{% endfor %}
我想使用类似的东西:
{{ article.mainImg }}
我怎样才能做到这一点?这是最好的解决方案吗?
答案 0 :(得分:2)
Doctrine提供了一个可用于获取“主图像”的集合过滤机制:
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
));
}
有关过滤学说集合的更多信息:Filtering collections
我自己没有测试代码,但它应该传达如何完成代码的想法。