如何在没有关联的情况下使用Repository与symfony 2.8中的Entity类

时间:2016-05-19 05:45:37

标签: php symfony repository entity

我想要如下逻辑: - >控制器 - >调用Model类(使用实体,管理器扩展模型) - >模型中的函数将调用getRepository()并使用处理数据库的函数。

我该怎么做?当我调用Repository时,我必须有一个实体,如果我有一个空实体,那么错误就是我必须有一个带id的主列。

1 个答案:

答案 0 :(得分:0)

正如第一条评论所说,您不应直接从实体类调用存储库。这里有几个选项(按代码质量降序)

优化反转控制流的逻辑

定义一个服务,它接受实体,存储库并完成工作

$service = new EntityStuffService($repository);
$service->doTheStuff($entity);

声明关系

只需在您的课程中声明一个真实内容并手动过滤即可。 Doctrine PersistentCollection实现了Selectable,因此您只需使用->matching($criteria)调用即可对其进行过滤。

http://doctrine-orm.readthedocs.io/en/latest/reference/working-with-associations.html#filtering-collections

最丑陋的方式

Doctrine具有ObjectManagerAware接口,允许您在水化完成时将对象管理器注入实体。这将允许您实现AR样式和其他意大利面条代码,我强烈建议您不要这样做。

https://github.com/doctrine/common/blob/master/lib/Doctrine/Common/Persistence/ObjectManagerAware.php

您可以实现此接口并将ObjectManager存储在实体中,以便对其执行任何操作。