簡體   English   中英

Symfony3 querybuilder orderby數不清

[英]Symfony3 querybuilder orderby count few manytomany

我有一個名為Tag的實體,它有3個ManyToMany關系節,文章和新聞。

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

現在,我想編寫一個createQueryBuilder,以“新聞” +“文章” +“節日”的順序進行排序,僅用於查找“ TOP TAGS”。 我發現僅針對一個manyToMany關系的解決方案。

有什么辦法嗎?

編輯:我有:

    $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');

但是它給出了假的結果。 當某個標簽具有3個節日,1個文章和0個新聞時,結果為festcount = 3,newscount = 0,articlescount = 3和totalcount = 6,應為4。

試試這個代碼:

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

如果您需要進一步的幫助,請提供這些表的轉儲。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM