在Symfony2中放置使用多个实体的Doctrine查询的位置?

时间:2014-12-05 15:32:23

标签: php sql symfony doctrine

我编写了一个非常庞大而复杂的查询,它在内部使用UNION从多个表中进行选择,然后返回一个混合类型实体的数组。

我知道Symfony的最佳实践说总是将查询放在存储库类中,但我该如何决定将它放入?它们之间没有父/子关系,这两个实体完全相同。

2 个答案:

答案 0 :(得分:1)

我通常把它们放在我认为是上下文中最依赖的实体的存储库中。

例如,如果我有两个实体:UserGroup 许多实体可能与组具有拥有关系,但您不能指望Group存储库单独提供每个特定依赖项运行所必需的方法。

依赖(拥有方)的责任是建立连接,而hense提供功能。

因此getUsersInGroup(Group $group)之类的方法属于UserRepository

但是,您说您的两个实体之间没有直接关系 在这种情况下,我的第一条评论适用。使用其实体在查询上下文中更依赖于另一个的存储库。无论哪个实体,完全取决于你。

答案 1 :(得分:0)

不要使用存储库。存储库绑定到特定实体类型的上下文,它is supposed to be used as a Collection

还有

<块引用>

存储库在域和数据映射层之间中介,就像内存中的域对象集合。 (M.Fowler)

在您的情况下,我假设没有对象关系映射,因为您使用的是带有 UNION 表的查询。我假设您的查询不会返回实际的 Doctrine 实体,对吗?

在这种情况下,查询不属于 Repository 模式,我建议你有一个自定义类来封装大/复杂查询 PHP+SQL 代码,例如:

namespace App\Query

class MyComplexQuery {

(可选地实现 QueryInterface

并从您的 ControllerService 调用它,而不从存储库传递。


如果您要定义自定义 Doctrine 实体来表示实体联合的结果,请使用此类实体的存储库。