【问题标题】:Sorting the most relation with Doctrine排序与 Doctrine 的最大关系
【发布时间】:2022-10-24 15:04:42
【问题描述】:

排序与 Doctrine 的最大关系?

关系

#[ORM\ManyToOne(inversedBy: 'users')]
#[ORM\JoinColumn(nullable: false)]
private ?University $university = null;

我的存储库代码(排序不正确)

public function sortPopularChats(): array
{

    return $this->createQueryBuilder('u')
        ->orderBy('u.university', 'DESC')
        ->groupBy('u.university')
        ->setMaxResults(5)
        ->getQuery()
        ->getResult()
        ;
}

我的用户表

|id|university_id|

|1|100610385|...
|2|106952005|...
|5|100610385|...
|11|108410557|...
|6|100610385|...
|7|106952005|...
|4|100610385|...
|9|106952005|...
|10|100610385|...

排序应该是这样的

  1. 100610385
  2. 106952005
  3. 108410557
  4. ...
  5. ...

【问题讨论】:

  • 对这个问题有点困惑。在您的代码中,您设置了OrderBy to University, Desc。但是在它下面的示例数据中,您显示列名 University_ID(不是大学)。最后,您需要按 ASC 顺序排列所需的输出。
  • university_id 是一个对象。所以不写成 university_id

标签: php sql symfony doctrine-orm doctrine


【解决方案1】:

您需要一个count 表达式才能将其用作排序字段,但这样做会返回一个ScalarResult,其中包含计数和对象。为防止这种情况,您可以使用HIDDEN keyword(向下滚动或搜索),因此只返回University 实体:

public function sortPopularChats(): array
{
    return $this->createQueryBuilder('e')
        ->leftJoin('e.university', 'u')
        ->addSelect('u, count(u) AS HIDDEN uniCount')
        ->orderBy('uniCount', 'ASC')
        ->groupBy('u.id')
        ->setMaxResults(5)
        ->getQuery()
        ->getResult()
        ;
}

【讨论】:

  • 不工作。 [Syntax Error] line 0, col 26: Error: Expected DoctrineORMQueryLexer::T_FROM, got 'AS'
  • 我弄乱了顺序,应该是AS HIDDEN uniCount(我想)
  • 我想,但它给出了这样的错误[Semantical Error] line 0, col -1 near 'SELECT u, count(u)': Error: Cannot select entity through identification variables without choosing at least one root entity alias.
  • 谢谢你。我像这样更改了select(),我的问题解决了addSelect()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-12
  • 2011-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多