【问题标题】:Doctrine2 basic; Proxies, Repositories教义2基本;代理,存储库
【发布时间】:2011-08-28 17:24:12
【问题描述】:

我可以使用 Doctrine2 并且它有效。但我真的不明白我在做什么..

  1. 我不明白什么是代理,我都是从命令行创建的,但我真的需要它们吗?

  2. Doctrine2 注释如何工作? Doctrne2文件是否每次都扫描从Entity注解中找到repository类文件?

我想我需要一些资源来理解 ORM 的基本概念。 项目正在运行,但我不太确定它是否正常运行..

谢谢

【问题讨论】:

  • 你有没有考虑过使用谷歌? “教义 2 手册”、“教义 2 教程”、“教义 2 指南”、“教义 2 文档”都会导致找到教义教程。 ORM 的基本概念也很容易找到。对于代理,我建议您阅读 Martin Fawler 的 PoEAA。
  • 我在下面问了 2 个问题,“doctrine2 manual”谷歌搜索永远无法回答。如果您不喜欢这个问题,最好不要回答。任何问题的答案都可以在谷歌中找到,如果你有多年的经验。
  • 我的意思是你在问一些容易找到的概念。现在您想让别人为您输入确切的内容,只是因为您懒得在手册中搜索答案?

标签: php repository doctrine-orm


【解决方案1】:

好的,首先要了解的是您的数据库表和关系已“映射”到您的 php“实体”。例如,您可能有一个用户表。然后,您将拥有一个代表用户实体的 php 类。此类内部是受保护/私有成员变量,它们表示用户表中的值以及与其他实体的关系。

Doctrine 从您的映射文件中获取映射信息。这些可能是实体本身,其中映射信息在您的实体类中表示为注释 (cmets)。您也可以使用 YAML 或 XML 将映射信息与实体类完全分开。

一旦您配置好实体类和映射信息并准备就绪,Doctrine 就会在幕后生成“代理”类。您不必创建这些,因为您可以将 D2 配置为自动为您创建它们。代理类通过继承提供对您的实体的访问,并且是 Doctrine 2 的必需部分,没有它们,您将无法访问实体数据。

要记住的另一件事是工作单元。当您从数据库中获取实体时,例如用户,工作单元 (uow) 在内部保存对它的引用。如果您随后对实体进行更改并持久化并刷新它,则 uow 会计算从 db 获得的数据与返回的数据之间的差异,并计算完成作业所需的 sql。

刚开始使用 D2 可能会令人生畏,因为它完全重写了第一个版本,并且有许多新的设计模式需要理解,所以如果您现在不确定,请不要担心,继续工作有了它,它最终会开始点击。

编辑

要回答您的第二个问题,是的,Doctrine 会针对每个请求扫描您的映射信息。这显然会减慢执行速度。但是,在生产中,您将使用其中一种驱动程序(ApcCache、MemcachCache 等)启用元数据缓存。这不会成为问题。还值得指出的是,D2 支持 3 种类型的缓存,元数据、查询(DQL 转换)和结果(数据库结果缓存)。所有这些都可以使用不同的缓存驱动程序进行配置。

【讨论】:

  • 毫无疑问它的工作原理:) 谢谢它现在对我来说更清楚了。
【解决方案2】:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-19
  • 1970-01-01
  • 2013-06-05
  • 1970-01-01
  • 2021-05-12
  • 1970-01-01
  • 2016-07-17
相关资源
最近更新 更多