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 方法是什么:
- 获取 10 文章 并预先加载每篇文章的最新 评论
- 获取 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 个是不可能的。
假设数据库结构如下-一个分类有很多文章,一篇文章有很多评论:
Category:
- id
Article:
- id
- category_id
Comment:
- id
- created_at
- article_id
使用 Doctrine,best/standard 方法是什么:
- 获取 10 文章 并预先加载每篇文章的最新 评论
- 获取 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 个是不可能的。