ani*_*eni 2 php repository doctrine-orm
我可以使用Doctrine2,它可以工作.但我真的不明白我在做什么..
我不明白什么是代理,我从命令行创建了em,但我真的需要它们吗?
Doctrine2注释如何工作?Doctrne2文件是否每次都扫描以从Entity注释中查找存储库类文件?
我认为我需要一些资源来理解ORM的基本概念.项目正在运行,但我不确定它是否正常工作..
谢谢
好的,首先要理解的是你的数据库表和关系被"映射"到你的php'实体'.例如,您可能有一个用户表.然后,您将拥有一个代表用户实体的php类.此类中包含protected/private成员变量,这些变量表示users表中的值以及与其他实体的关系.
Doctrine从映射文件中获取映射信息.这些可能是实体本身,其中映射信息在实体类中表示为注释(注释).您也可以使用YAML或XML将映射信息与实体类完全分开.
一旦您配置了实体类和映射信息并准备好了,Doctrine就会在幕后生成"代理"类.您不必创建这些,因为您可以配置D2为您自动创建它们.代理类通过继承提供对实体的访问,并且是Doctrine 2的必需部分,没有它们,您无法访问实体数据.
要记住的另一件事是工作单位.当你从数据库中获得一个实体时,比如一个用户,工作单元(uow)在内部持有对它的引用.如果然后对实体进行更改并保持并刷新它,那么uow会计算从db获取的那个与它返回的那个之间的差异,并计算完成作业所需的sql.
最初使用D2可能会令人生畏,因为它是对第一版的完全重写,并且有许多新的设计模式需要理解,所以不要担心如果你现在不确定它,继续使用它和它最终会开始点击.
编辑
要回答第二个问题,是Doctrine会在每个请求中扫描您的映射信息.这显然会减慢执行速度.但是,在生产中,您将使用其中一个驱动程序(ApcCache,MemcachCache等)启用元数据缓存.这不会成为一个问题.值得指出的是,D2支持3种类型的缓存,元数据,查询(DQL转换)和结果(数据库结果缓存).所有都可配置不同的缓存驱动程序.