我在symfony中查询有困难

时间:2019-04-03 09:25:10

标签: php sql symfony doctrine repository

我有实体标记[id,title] 和实体 annonce [id,title]

ManyToMany 相关的标记和名词,

所以我很迷恋 annonce_tag [annonce_id,tag_id]

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

我想查询以获取最常用的3个标签的顶部

谁有建议进行此查询

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

我已经在“代码存储库”中尝试过此方法,但无法正常工作

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

3 个答案:

答案 0 :(得分:0)

您可以如下编写联接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();

答案 1 :(得分:0)

您可以像这样进行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告诉该学说在查询中使用字段,但不将其作为数组返回给getResult()

答案 2 :(得分:0)

您可以执行以下操作:

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

您将获得标签的有序列表,以及每个标签的链接nononce数量