我想计算给定特定文章的标签数量。我有两个与多对多关联相关的实体(文章,标签):
//Bundle/Entity/Article.php
/**
* @ORM\ManyToMany(targetEntity="Tag")
*/
private $tags;
现在我有n篇带m标签的文章,我想知道特定标签的使用频率。
我对Symfony2和Doctrine都比较陌生。问题是我不知道在哪里适合这样的查询(我想它应该存在于ArticleRepository中,但另一方面它有意义将它放在TagRepository中)以及如何加入正确的表(在此case Article,article_tag,Tag)。
答案 0 :(得分:2)
我能想到的最简单的方法是在Article和Tag之间建立双向关系:
class Article
{
/**
* @ORM\ManyToMany(targetEntity="Tag", inversedBy="articles")
*/
private $tags;
}
class Tag
{
/**
* @ORM\ManyToMany(targetEntity="Article", mappedBy="tags")
*/
private $articles;
}
然后,您可以(假设您已设置标准的getter和setter)使用$tag->getArticles()->count();
,其中$tag
是托管代码实体,以获取附加到该代码的文章数量。这是有效的,因为在填充ToMany关系属性时,Doctrine使用Doctrine\Common\Collections\ArrayCollection
的实例。查看来源here。
另外,如果你走这条路,请务必阅读有关选择拥有和反面here的文档。
答案 1 :(得分:2)
您可以使用特定的文章来计算标签数量.lets说文章ID = 5:
$query=$em->createQuery("SELECT count(t.id) FROM Tag t WHERE ?1 MEMBER OF t.articles");
$query->setParameter(1,5 );
$result = $query->getSingleScalarResult();
这仅为文章ID = 5提供了文章实体中的标签数量。