在双向 OneToMany 关系中获得我想要的实体的更好解决方案是什么?
What is the better solution to get the Entity I want in a biderectional OneToMany relation?
我有一个实体 Article 和另一个实体 Image 具有双向关系 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,
));
}
现在我的问题是我想在我拥有的所有 "article.images" 中识别唯一具有属性 "main = true" 的图像。
最好的解决方案是什么?
在我看来,我可以做这样的事情,但我认为这不是最好的:
{% for image in article.images %}
{% if image.main %}
<img src="{{ asset( image.src ) }}" alt="{{ image.alt }}" title="{{ image.title }}">
{% endif %}
{% endfor %}
我想使用类似的东西:
{{ article.mainImg }}
请问我怎样才能做到这一点?这是最好的解决方案吗?
Doctrine 提供了一个集合过滤机制,你可以使用它来获取 "main image":
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
我没有亲自测试代码,但它应该传达了如何做到这一点的想法。
我有一个实体 Article 和另一个实体 Image 具有双向关系 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,
));
}
现在我的问题是我想在我拥有的所有 "article.images" 中识别唯一具有属性 "main = true" 的图像。
最好的解决方案是什么?
在我看来,我可以做这样的事情,但我认为这不是最好的:
{% for image in article.images %}
{% if image.main %}
<img src="{{ asset( image.src ) }}" alt="{{ image.alt }}" title="{{ image.title }}">
{% endif %}
{% endfor %}
我想使用类似的东西:
{{ article.mainImg }}
请问我怎样才能做到这一点?这是最好的解决方案吗?
Doctrine 提供了一个集合过滤机制,你可以使用它来获取 "main image":
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
我没有亲自测试代码,但它应该传达了如何做到这一点的想法。