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

Inserting data with Doctrine - Repository Vs Entity

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

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

对于 "Update" 操作,我会首先 ->find($id) 更新记录,然后 return 实体的实例绑定到我的表单对象。

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

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

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

正如@Crisp 在评论中指出的那样,实体不超过 PHP classes,存储库也是如此。 两者以各自的作用来区分。

您永远不会隐式地创建存储库的新实例,因为原则会根据 DependencyInjection 原则(Service, Factory,...)为您创建。

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

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

实体 class 本身永远不会 broken/changed,只会创建、重命名、移动、删除它们的实例。
这些实例 代表 您的数据库条目,这是使用 ORM 的主要兴趣。