我已经意识到 Doctrine 存储库和 Doctrine 实体之间存在差异。
我正在尝试在表上实现简单的 CRUD 操作,并将默认的 Doctrine 存储库注入(inject)到我的 Controller 中(不注入(inject)实体)。
对于“更新”操作,我将首先 ->find($id)
为了更新记录,它会返回一个实体实例,让我绑定(bind)到我的表单对象。
对于“创建”操作,我意识到我不能 ->find($id)
要插入的记录(因为它不存在),以便检索实体的实例,以便我绑定(bind)到我的表单对象。
是否有另一种方法可以在没有实体实例的情况下使用 Doctrine 插入数据?或者有没有办法从存储库中检索实体的实例,以便我可以 ->bind()
它的形式?如果两者的答案是否定的,那么我想我唯一的选择是将实体的实例注入(inject)我的 Controller ,或者使用包含方法的自定义存储库,该方法将返回要在 ->bind()
中使用的实体。用于插入。
我的猜测是定义一个自定义存储库,该存储库具有一个检索空实体实例以用于插入的方法。这个假设正确吗?
最佳答案
正如@Crisp 在评论中指出的那样,实体只不过是 PHP 类,对于存储库也是如此。
两者的区别在于各自的角色。
您永远不会隐式创建存储库的新实例,因为教义会跨 DependencyInjection 原则( Service , Factory ,...)为您完成它。
要创建新的数据库条目,您必须创建相应实体的新实例,然后使用 EntityManager::persist
存储它和 EntityManager::flush
方法。
重用实体的相同实例不会给您带来任何好处,也不会对项目的可维护性产生任何影响。
实体类本身永远不会被破坏/更改,只有它们的实例被创建、重命名、移动、删除。
这些实例 代表您的数据库条目,这是使用 ORM 的主要兴趣。
关于php - 使用 Doctrine 插入数据 - 存储库与实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36291237/