我在 symfony 中查询有困难

I have difficulty with a query in symfony

我有实体 tag [id, title] 和实体 annonce [id, title] .

关系中的标签和通知 ManyToMany,

所以我有关联 annonce_tag [annonce_id, tag_id ]

我只有存储库 tag 和存储库 annonce,我没有 annonce_tag 存储库

我想查询以获得最常用的 3 个标签的 TOP

谁有建议进行此查询

/---------已更新---------/

我已经在标签存储库中尝试过这个但没有用

   return $query = $this->createQueryBuilder('t')
        ->select('t.id','count(a)')
        ->innerJoin('t.annonces', 'a')
        ->getQuery()->getResult();

您可以编写如下连接 DQL 查询,只需更改值和语义以适合您的场景:

$query = $repository->createQueryBuilder('t')
    ->select('COUNT(a) AS HIDDEN annonceNumber', 't')
    ->innerJoin('t.annonce', 'a')
    ->groupBy('a')
    ->orderBy('annonceNumber', 'DESC')
    ->limit(3)
    ->getQuery()->getResult();

你可以像那样做 DQL

// in annouce repository
$query = $repository->createQueryBuilder('a')
    ->select('COUNT(t) AS HIDDEN usedTags', 'a')
    ->innerJoin('a.tag', 't')
    ->groupBy('t')
    ->orderBy('usedTags', 'DESC')
    ->limit(3)
    ->getQuery()->getResult();

hidden 告诉学说在查询中使用字段而不是 return 它作为 getResult() 中的数组

你可以这样做:

SELECT tag.id, count(annonce.id) from App:Tag tag JOIN tag.annonces annonce GROUP BY tag.id ORDER BY count(annonce.id) desc

您将获得一个有序的标签列表,其中包含每个标签的链接数量