使用Doctrine插入数据 - 存储库与实体

时间:2016-03-29 17:34:54

标签: php orm doctrine-orm zend-framework2

我意识到Doctrine存储库和Doctrine实体之间存在差异。

我正在尝试在表上实现简单的CRUD操作,并将默认的Doctrine存储库注入到我的控制器中(不注入实体)。

对于“更新”操作,我首先->find($id)要更新记录,它将返回实体的实例,以便我绑定到我的表单对象。

对于“创建”操作,我意识到我不能->find($id)要插入的记录(因为它不存在),以便检索实体的实例以便我绑定到我的表单对象。

是否存在使用Doctrine插入数据而没有实体实例的替代方法?或者有没有办法从存储库中检索实体的实例,以便我可以->bind()到表单?如果两者的答案都是否定的,那么我想我唯一的选择是将实体的实例注入我的控制器,或者使用包含一个方法的自定义存储库,该方法将返回在->bind()中使用的实体插入。

我的猜测是定义一个自定义存储库,它有一个方法可以检索空实体实例以便在插入时使用。这个假设是否正确?

1 个答案:

答案 0 :(得分:4)

正如@Crisp在评论中所指出的,实体只不过是PHP类,对于存储库也是如此。 两者因各自的角色而不同。

您永远不会隐式创建存储库的新实例,因为相关原则(ServiceFactory,...)中的学说会为您执行此操作。

要创建新数据库条目,您必须创建相应实体的新实例,然后使用EntityManager::persistEntityManager::flush方法存储它。

重复使用实体的同一实例不会给您带来任何好处,也不会对您项目的可维护性产生任何影响。

实体类本身永远不会被破坏/更改,只会创建,重命名,移动和删除它们的实例 这些实例表示您的数据库条目,这是使用ORM的主要兴趣。