【问题标题】:I have difficulty with a query in symfony我在 symfony 中查询有困难
【发布时间】:2019-04-03 09:25:09
【问题描述】:

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

标签和公告关系ManyToMany

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

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

我想查询 TOP 例如最常用的 3 个标签

谁有建议进行此查询

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

我已经在标签库中尝试过这个,但没有工作

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

【问题讨论】:

    标签: php sql symfony doctrine repository


    【解决方案1】:

    你可以这样做:

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

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

    【讨论】:

    • 我已将您的代码转换为此返回 $query = $this->createQueryBuilder('t') ->select('t.id','count(a)') ->innerJoin( 't.annonces', 'a') ->getQuery()->getResult();是真的吗?
    • 你错过了按部分分组和排序:)
    • 另外,你应该使用 getScalarResult 而不是 getResult
    【解决方案2】:

    你可以像那样做 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() 中不将其作为数组返回

    【讨论】:

    • 它返回 annonces,但我想返回必须在所有 annonces 中使用的标签
    • 所有公告中使用的3个标签?
    • 是的,我想看看必须在 annonces 中使用的 3 个标签,看看我尝试过的(我已经更新了问题)
    • 在每一个或至少一个?
    • 不是每一个都有,例如 annonce1 有标签 car,bike 和 annonce 2 有标签 car 所以必须使用的标签是 car
    【解决方案3】:

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

    【讨论】:

    • 为什么你设置 annonce_id 5?,我想看看所有应用程序中必须使用的标签
    • 我只是向您展示了如何查询多对多关系,这就是为什么我说将语义和值更改为您需要的。我已经更新了我的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多