dpnvrt3119
2017-02-25 21:45
浏览 44
已采纳

Symfony3 querybuilder命令数不胜数

I have an entity called Tag, it has 3 ManyToMany relations fests, articles and news.

AppBundle\Entity\Tag:
    type: entity
    table: tag
    ...
  manyToMany:
      news:
          orderBy: { 'posted': 'DESC' }
          targetEntity: News
          inversedBy: tags
          joinTable:
            name: news_tag
            joinColumns:
              tag_id:
                referencedColumnName: id
            inverseJoinColumns:
              news_id:
                referencedColumnName: id
      articles:
          orderBy: { 'posted': 'DESC' }
          targetEntity: Article
          inversedBy: tags
          joinTable:
            name: article_tag
            joinColumns:
              tag_id:
                referencedColumnName: id
            inverseJoinColumns:
              article_id:
                referencedColumnName: id
      fests:
          orderBy: { 'when_starts': 'DESC', 'when_ends': 'DESC' }
          targetEntity: Fest
          inversedBy: tags
          joinTable:
            name: fest_tag
            joinColumns:
              tag_id:
                referencedColumnName: id
            inverseJoinColumns:
              fest_id:
                referencedColumnName: id

Now I want to write a createQueryBuilder that orders by the count "news" + count "articles" + count "fests", just for finding "TOP TAGS". I found solution only for one manyToMany relation.

Is there any way to do this?

EDIT: What I have:

    $qb->select(array(
        't.id', 
        't.name', 
        'COUNT(f) as festcount',
        'COUNT(n) as newscount',
        'COUNT(a) as articlescount',
        '(COUNT(f) + COUNT(n) + COUNT(a)) as totalcount'
        ))
    ->from('AppBundle:Tag', 't')
    ->leftJoin('t.fests', 'f')
    ->leftJoin('t.articles', 'a')
    ->leftJoin('t.news', 'n')
    ->groupBy('t.id')
    ->orderBy('totalcount', 'DESC');

But it giving fake results. When some tag has 3 fests, 1 article and 0 news, result is festcount = 3, newscount = 0, articlescount = 3 and totalcount = 6, and it should be 4.

1条回答 默认 最新

相关推荐 更多相似问题