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

d.l*_*a38 3 php orm doctrine-orm zend-framework2

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

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

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

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

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

我的猜测是定义一个自定义存储库,该存储库具有一种方法,该方法可检索空实体实例以供插入。这个假设正确吗?

cha*_*asr 5

正如@Crisp在评论中所指出的,实体只不过是PHP类,与存储库相同。两者根据各自的角色而有所区别。

您将永远不会隐式地创建存储库的新实例,因为该学说会通过DependencyInjection原理(ServiceFactory,...)为您完成。

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

重用实体的同一实例不会给您带来任何好处,也不会给您的项目的可维护性带来任何改变。

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