Doctrine:从一对多关系中检索有序的单个实体

Doctrine: retrieving an ordered single entity from a one to many relationship

假设数据库结构如下-一个分类有很多文章,一篇文章有​​很多评论:

Category:
- id

Article:
- id
- category_id

Comment:
- id
- created_at
- article_id

使用 Doctrine,best/standard 方法是什么:

  1. 获取 10 文章 并预先加载每篇文章的最新 评论
  2. 获取 10 个 类别 并预先加载每个类别中的最新 评论

通过在 Laravel 中的比较,我可以在类别实体上建立关系以通过文章发表评论,并按创建日期对其进行排序。但是,我不知道如何通过 Doctrine 或 DQL 来实现。

恐怕没有 "standard way" 用于预载。我的意思是无法用一些 config/annotations 来设置它。

我会按照以下方式进行:

  • 创建评论存储库class
  • 在其中创建 getMostRecentCommentsForCategories(array $categories)getMostRecentCommentsForArticles(array $articles) 方法
  • 他们可以 return 按 category/article ID
  • 分组的评论数组

对于订购,您可以使用 @OrderBy 注释,例如

   /**
     * @var RiskMitigation[]|ArrayCollection
     * @ORM\OneToMany(targetEntity="App\Entity\RiskMitigation", mappedBy="risk")
     * @ORM\OrderBy({"effectiveDate" : "ASC"})
     */
    private $mitigations;

但是,如果使用注释,您计划只急切地加载最新的 10 个是不可能的。