【问题标题】:Get all users and order by the number of post in symfony获取所有用户并按symfony中的帖子数量排序
【发布时间】:2017-01-02 19:41:16
【问题描述】:

我有两个实体,用户和帖子。这些实体与onetomany 和manytoone 关系相连。连接工作正常。我一直在尝试创建一个查询,该查询将获取所有发布帖子的用户,并按他们的帖子数量降序排列。

用户实体:

/**
     * @ORM\OneToMany(targetEntity="Post", mappedBy="user")
     */
     private $post;

发布实体:

/**
     * @ORM\ManyToOne(targetEntity="User", inversedBy="post")
     * @ORM\JoinColumn(name="user", referencedColumnName="id", onDelete="CASCADE")
     */
     private $user;

没问题,基本上就是不知道怎么在symfony中查询。

所以,这是返回所有用户的基本查询

$query = $this->createQueryBuilder('u')
            ->leftJoin('u.post', 'p')
            ->getQuery();

        return $query->getResult();

【问题讨论】:

  • 请出示您的查询并告诉我们您遇到的问题。
  • 嗨@dbrumann,问题是我不太确定如何创建学说查询

标签: symfony entity-relationship


【解决方案1】:

对不起,我不能以 cmets 的身份回复,很高兴你把它整理好了。但请考虑未来和可扩展性。每次都计算帖子并不是一个好主意,甚至一次是残酷的诚实。考虑做大多数论坛软件现在所做的事情,并在发布帖子时增加一个字段(称为 post_count 或其他名称)。

您可以在删除后减少它,或者提供一个“重新计数”选项,管理员可以强制重新计数,但这应该是最后的手段。

【讨论】:

  • 你是对的,获取所有项目以在 php 中计算它们不是一个好主意。不过,为此增加一个专栏似乎是另一个坏主意。该字段可能会不同步,并且无论如何都是无用的开销。 MySQL 可以对您的数据执行快速 COUNT 查询,而无需额外的“帮助”字段。您应该找到一种使用 Doctrine ORM 按计数排序的方法,或者创建一个您自己编写查询的自定义存储库。
【解决方案2】:

好的,所以我似乎设法解决了他的问题。这是查询:

$query = $this->createQueryBuilder('u')
            ->select('u')
            ->leftJoin('u.post', 'p')
            ->addSelect('COUNT(p) AS total')
            ->groupBy('u.id')
            ->orderBy('total', 'DESC')
            ->getQuery();

        return $query->getResult();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 2020-06-04
    相关资源
    最近更新 更多