【问题标题】:Doctrine2 order by count many to many with many left joinDoctrine2 按数量排序,多对多,多左连接
【发布时间】:2021-07-02 02:49:50
【问题描述】:

我有一个实体书,它与其他实体的关系太多。现在我想对多对多关系属性之一的 COUNT 列进行排序,我使用这种方法

但它给了我一个错误的回应:

  • 它只显示我的任何联接实体中的一行,因为它按图书 ID 分组
  • 计数错误,因为它计算了所有连接行,所以数字通常很大

发生这种情况是因为我的查询构建器中有太多这样的左连接:

$this->createQueryBuilder('b')
        ->addSelect('bookTranslations')
        ->addSelect('bookGenres')
        ->addSelect('bookCrews')
        ->addSelect('feels')
        ->addSelect('genre')
        ->addSelect('user')
        ->leftJoin('b.translations', 'bookTranslations')
        ->leftJoin('b.bookGenres', 'bookGenres')
        ->leftJoin('b.bookCrews', 'bookCrews')
        ->leftJoin('bookCrews.user', 'user')
        ->leftJoin('bookGenres.genre', 'genre')
        ->leftJoin('b.feels', 'feels')
        ->addSelect('COUNT(bookGenres) AS HIDDEN genreCount')
        ->groupBy('b.id')
    ;

我使用 symfony 序列化器来处理响应数据

有什么想法吗?

【问题讨论】:

    标签: php mysql doctrine-orm symfony4


    【解决方案1】:

    由于->groupBy('b.id'),它应该逐书显示你,你希望书有多少行?

    至于排序,您缺少 orderBy :

      ->orderBy('genreCount', 'DESC')
    

    【讨论】:

    • 我想要所有书籍及其所有关系,例如,如果这本书有三种类型,我想显示所有三种类型,但它只显示一种类型,关于 orderBy,我忘了在这里添加,我的代码中有它
    • 如果您希望每本书有一行,但它是多对多关系,您可能需要每个多对多的子查询。看看其他的:stackoverflow.com/questions/194852/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 2012-05-15
    相关资源
    最近更新 更多