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

标签 php orm doctrine-orm zend-framework2

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

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

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

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

是否有另一种方法可以在没有实体实例的情况下使用 Doctrine 插入数据?或者有没有办法从存储库中检索实体的实例,以便我可以 ->bind()它的形式?如果两者的答案是否定的,那么我想我唯一的选择是将实体的实例注入(inject)我的 Controller ,或者使用包含方法的自定义存储库,该方法将返回要在 ->bind() 中使用的实体。用于插入。

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

最佳答案

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

您永远不会隐式创建存储库的新实例,因为教义会跨 DependencyInjection 原则( ServiceFactory ,...)为您完成它。

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

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

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

关于php - 使用 Doctrine 插入数据 - 存储库与实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36291237/

相关文章:

ajax调用中的php json响应

php - 我怎样才能消除这个脚本中对 die() 的使用,以便底部的 HTML 仍然运行?

php - 将表单提交到页面并根据输入显示不同的 div

php - 如何为数据库表中的主键生成随机字符串

hibernate - ColdFusion ORM 缓存和 LogSQL

symfony - Doctrine 连接错误 "Undefined index: product in ObjectHydrator.php"(Symfony2)

php - "Real"使用 Doctrine/MySQL 删除孤儿

java - 为什么 Hibernate 要求列表索引可以为空?

java - Hibernate Hql 查找分页器的结果大小

json - 反序列化与 Symfony Serializer Component 有关系的实体