【发布时间】:2016-07-17 10:01:57
【问题描述】:
我已经意识到 Doctrine 存储库和 Doctrine 实体之间存在差异。
我正在尝试在表上实现简单的 CRUD 操作,并将默认 Doctrine 存储库注入我的控制器(不注入实体)。
对于“更新”操作,我首先要->find($id) 更新记录,它会返回一个实体实例,以便我绑定到我的表单对象。
对于“创建”操作,我意识到我不能->find($id) 插入一条记录(因为它不存在),以便检索实体的实例以绑定到我的表单对象。
是否有另一种方法可以在没有实体实例的情况下使用 Doctrine 插入数据?或者有没有办法从存储库中检索实体的实例,以便我可以->bind() 将其发送到表单?如果两者的答案都是否定的,那么我想我唯一的选择是将实体的实例注入我的控制器,或者使用自定义存储库,其中包含一个方法,该方法将返回一个实体以在->bind() 中使用以进行插入.
我的猜测是定义一个自定义存储库,该存储库有一个检索空实体实例以用于插入的方法。这个假设正确吗?
【问题讨论】:
-
为什么需要在任何地方注入实例?这就是
new关键字的用途,它是一个新实体。在控制器中创建实体的新实例并绑定它。如果您不想在控制器中硬编码实体类名称,您可以使用存储库getClassName()方法获取实体类名称,然后创建一个新实例。 -
如果我这样做了,那将是一个隐含的依赖关系,下一个处理此代码的人将很难弄清楚为什么在实体被删除、移动、重命名后类被破坏,等等。这样做很容易,然后就收工了,但是这种方法对于未来的开发来说是不可维护的。
标签: php orm doctrine-orm zend-framework2