gpt4 book ai didi

php - Doctrine2 基础;代理、存储库

转载 作者:行者123 更新时间:2023-12-04 00:00:31 25 4
gpt4 key购买 nike

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

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

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

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

谢谢

最佳答案

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

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

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

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

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

编辑

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

关于php - Doctrine2 基础;代理、存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6056440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com