2011-05-19 71 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