繁体   English   中英

symfony2合并实体的学说数

[英]symfony2 doctrine count number of joined entity

我有与manyToOne关系的文章和类别实体。 我想列出带有文章数的类别。 如何使用Doctrine2进行有效查询?

如果您已经正确设置了类别实体,那么只需调用其getter计数就可以获取其文章集合,假设您具有如下映射的实体

文章

class Article
{
    // ...

    /**
     * @ORM\ManyToOne(targetEntity="Category", inversedBy="articles")
     * @ORM\JoinColumn(name="category_id", referencedColumnName="id")
     */
    protected $category;
    // ... title ,id ,bla bla bla
}

类别

use Doctrine\Common\Collections\ArrayCollection;

class Category
{
    // ...

    /**
     * @ORM\OneToMany(targetEntity="Article", mappedBy="category")
     */
    protected $articles;
    // ... title ,id ,bla bla bla    
    public function __construct()
    {
        $this->articles= new ArrayCollection();
    }
}

然后,您可以在控制器中循环类别实体

$DM = $this->getContainer()->getDoctrine()->getManager();
$categories = $DM->getRepository('Namespace\YourBundle\Entity\Category')->findAll();
foreach($categories as $c){
echo $this->getTitle();
echo count($this->getArticles());
}

在树枝上

{% for c in categories %}
{{ c.getTitle() }}
{{ c.getArticles()|length }}
{% endfor %}

通过查询生成器,您可以这样做

$DM = $this->getContainer()->getDoctrine()->getManager();

$query = $DM->createQueryBuilder()
      ->select('c.id,c.title, COUNT(a.id) as article_count')
      ->from('NamespaceYourBunle:Category', 'c')
      ->innerJoin('c.articles', 'a')
      ->groupBy('c.id')
;
$categories= $query->getQuery()->getResult();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM