2012-08-27 85 views
2

我有CodeIgniter和Cake PHP的實時項目經驗。但是現在我需要爲這兩個不合適的大項目工作。我幾乎決定使用symfony 1.4(根據我客戶的要求2.0不是一個選項)。推動或學說;這對於Symfony 1.4是更好的ORM

在Symfony 1.4中,我對ORM的選擇:Doctrine還是Propel感到困惑?我經歷了幾個鏈接。目前爲止找到的最好的是 PHP ORMs: Doctrine vs. Propel

然而,所有這些比較似乎至少有兩年的歷史,肯定世界會改變很多,因爲比。我對編碼風格沒有任何問題;我對所有Active Record,Criteria,DQL或其他方面都很滿意。對我而言,性能比最終編碼風格最重要。我主要關注在處理大量數據時的性能,可能是來自羣集數據庫下多個表的數百萬行。不幸的是,現在我的經驗還不足以就此事作出獨立的決定。

任何人都可以在Symfony 1.4下闡述Propel/Doctrine的性能嗎?除了性能以外,還有什麼其他值得注意的因素(編碼風格除外)在選擇PHP ORM時應該注意哪些?

+0

* 2.0沒有看起來成熟的選項現在* 什麼? 2.0越來越好,第一次穩定版本是1歲。 – j0k

+0

如果我傷害任何人,抱歉抱歉。其實我應該說根據我的客戶的要求和客戶是簡單的上帝...... :) –

+0

好吧,這更清楚,我已經更新了你的問題。 – j0k

回答

9

tl; dr:我長時間使用Doctrine,如果必須開始新的活動,我會選擇Propel。

這是一個很常見的問題,幾乎沒有很好的答案。但我只是給你我的觀點。

自從第一個alpha(以及舊的symfony 0.63)以來,我一直與Doctrine一起工作。我們選擇Doctrine而不是Propel,因爲Doctrine支持PDO(原生PHP),Propel仍然在Creole(這不是原生的)上運行。克里奧爾人與PDO相比非常緩慢(當然)。

最近,主義添加了迷失的魔法。我的意思是,你可以撥打getFieldfindOneByField,它會返回你想要的。這真的很棒,而不是必須建立自己的getter和setter。 魔術這次真的很時髦。

使用Doctrine編寫查詢非常簡單,而非Propel中令人痛心的Criteria和Criterion,它非常冗長。我非常喜歡教義,並建議大家開始使用它,而不是Propel。

然後,Propel從1.3開始切換到PDO,並開始有一個很好的API來寫查詢,幾乎和Doctrine一樣。主要區別在於,Propel會生成所有魔法東西,而教義則在飛行中生成。這是我認爲的最大區別。

Propel在這段代碼中沒有任何魔力。它會生成所有的getter/setter,join等,當你建立你的模型。它在運行查詢時會做所有事情。對於中小型項目來說沒問題,但是它開始變大,這將是一個緩慢的解決方案。調試也很好,因爲您可以在生成的類中找到代碼,您不必從類跳轉到類以找到處理這種情況的全局方法。

這兩個ORM使用行爲。我喜歡行爲。它們在教義和推進中以不同的方式處理。學說仍然使用它的魔法來處理它們,其中Propel根據類內的行爲生成一切(從生成的類而不是魔法類生成的一點)。

由於1.2.4分支幾乎死亡,因爲Doctrine 2(根本不是原生1.4版本),所以到目前爲止,Doctrine沒有真正改變(從你提到的線索給出一個鏡頭) (last release are 24/08/2010)。 Propel仍然活躍,非常活躍,您可以在github上看到。

我仍然與Doctrine一起工作,但幾年以來我從Propel中學到了很多東西。我在教義上建立了一些個人項目。截至今天,我改變了主意,如果我必須開始一個新項目,我會使用Propel來完成。

幾個環節:

+1

我想這很難得到Doctrine2與symfony 1.4(沒有整合)的工作,所以這意味着從Doctrine 1.2開始,這是慢(不好設計),沒有更多的維護。在Symfony 1.4中使用Propel 1.6似乎是事實上的解決方案(也是最安全的解決方案)。所以+1這個答案。 –