2011-05-19 72 views
2

我可以使用Doctrine2,它的工作原理。但我真的不明白我在做什么..Doctrine2 basic;代理,知识库

  1. 我不明白什么是代理,我已创建他们所有的命令行,但我真的需要它们?

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

我想我需要一些资源来了解ORM的基本consepts .. 项目是工作,但我不那么肯定是因为它的工作应该是..

感谢

+1

你甚至考虑过使用谷歌? “Doctrine 2手册”,“Doctrine 2教程”,“Doctrine 2指南”,“Doctrine 2文档”都将导致找到Doctrine教程。 ORM的基本概念也很容易找到。对于代理人,我建议您阅读Martin Fawler的PoEAA。 – user228395 2011-05-19 10:03:15

+1

我问了下面2个问题,绝不可以用“doctrine2 manual”谷歌搜索回答。如果你不喜欢这个问题,最好不要回答。如果你有几年,任何问题的答案都可以在谷歌找到。 – anilyeni 2011-05-19 14:53:44

+0

我在说的是你问的东西很容易找到的概念。现在你想让某人为你输入确切的东西,只是因为你懒得搜索手册中的答案? – user228395 2011-05-26 15:32:54

回答

7

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

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

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

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

由于D2是第一版的完全重写,并且有许多新的设计模式可以理解,所以不要担心,如果您现在不确定它,不要担心与它合作,它最终会开始点击。

编辑

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

+0

那里没有daubt它的工作:) 感谢它现在对我来说更清晰。 – anilyeni 2011-05-19 15:22:58