2011-03-22 20 views
3

我正在從Symfony轉換一個相當大(但有點簡單)的應用程序到Zend,因爲數據庫很大。這也是我的第一個Zend項目,但它似乎目前進展順利。該應用程序很簡單,數據庫相當複雜(如果手動完成,我預見了數小時的數據映射)。Zend與現有的Propel ORM

我擁有使用Symfony FW完成的所有原始源代碼。原始使用推進和工作(並有超過200個模型映射數據庫,272快速瀏覽)。

我的數據庫表具有相關的行和行,我也重用了原始數據庫結構...直接導入表/模式,所以我認爲原始行爲在這方面仍然可以正常工作。

我的問題是,試圖重新使用老應用程序的驅動部分(w /我的新的基於Zend的應用程序版本)是否花時間了?這應該是直接冒險嗎?

如果這可以工作,可以從我的生活:)

回答

4

消除了許多不眠之夜,我認爲你可以重複使用舊的應用程序的行走部分,因爲行走1.5(當前的穩定)和下一個1.6的向後兼容到Propel 1.3(如果我記得很好,用於Symfony 1.0)和它的原始「標準」語法。

然後,您將受益於Propel 1.5的改進(其中包括很好的「Query」語法),而不會丟失現有的代碼。

參見:

+0

感謝您的回答。我將把這看作是一個選項,之前使用的Propel是1.4,所以聽起來很有希望。聽起來像我甚至可以在某些時候重新生成地圖。 – rhaag71 2011-03-22 17:15:18

3

模型類可以包含對symfony類,如sfMixer。它們由extra Propel behaviors in the Symfony distribution加上。因爲sfMixer可能不會在您的新Zend項目中存在,這可能會導致錯誤。

但是,應該可以用乾淨的Propel安裝(在Zend或Symfony中禁用額外的行爲)重新生成模型,然後將自己的用戶可編輯的類文件複製到空的生成的類文件上。

如果你在你的Zend項目中使用與你在Symfony項目中相同的Propel版本,這應該是開箱即用(除非你編輯了Base類,但我假設你沒有這樣做)。如果您在Zend中使用更新版本的Propel來生成模型,那麼如果您訪問protected成員以來可能會出現兼容性問題,因爲這些成員已更改。

+0

謝謝你指出。我懷疑在SF Propel設置中可能會有額外的東西,所以我已經開始爲Zend版本開發新一代的類。我沒有在SF中做原始應用程序,所以我必須對數據庫進行逆向工程,並在Zend中重新編寫應用程序。目前,我在使用新的Zend應用程序進行配置時遇到問題。 – rhaag71 2011-03-23 14:40:52

0

對於其他人誰可以看這裏的利益,我會回答我的問題...

我最終什麼事做的是安裝最新版本的Propel(1.5)。 Jan Fabry(上文)提到,以前生成的模型(來自SF項目)可能存在剩餘要素,這也是我的擔憂。所以我在數據庫上運行了「反向」,並且也生成了新的模式/模型。

由於我重複使用現有的數據庫,我當然會將原始生成的模型放在手邊以供參考。我還在前一個應用程序上運行了一個phpDoc構建,包括生成的Propel模型,這是一個很好的工具,可以用來查看之前完成的工作。作爲一個'方面'的提示,我也在我的新生成的模型上運行了phpDoc,現在我有了一個'reference'doc來自我的新'custom db api',它是從Propel構建生成的...非常酷! 已經有一些模式問題,比如缺乏對ENUM類型的支持......但是在Propel的v1.6中。原始模型是Propel如何與現有數據庫一起使用的實例。當問題出現時,我預見在新模式中「手動」編輯一些條目。

Propel v1.5有一個新的'查詢'API(由Frosty Z指出),它取代(或增強)我的新應用中的'標準'和'同行'。原始代碼仍然是一個很好的模型(不是MVC模型),因爲之前數據庫如何集成到應用程序的邏輯中,但是我發現新版本的Propels'query'API將會是一個很大的幫助。我讀過Propel不支持'連接'的地方,但我看到這個版本的確存在,並且在Propel中還有許多其他新的有用的特性。非常值得注意的是,新API處理關係的方式。這些都在Propel的文檔中,我很想使用它。該數據庫對於「手動」界面來說相當大且複雜,因此Propel的「反向」功能也非常方便。

查詢像這樣的:

    $Users = UsersQuery::create() 
        ->filterByLastName($LastName) 
        ->find(); // $Users is a PropelCollection object 
       return $Users; 

是很「好」作爲霧Z說,並節省大量的編碼與使用Zend_Db的,或直的PHP/MySQL的,似乎不是更簡單以前的'標準','同行',方式。這段代碼來自Propel Docs,並解決了讓我在其他地方尋找解決方案的問題,有條件的發現似乎相對而言會以代碼大小增長。而且我已經可以看到根據ACL篩選結果是多麼容易。

我的答案是爲什麼我不重新使用原始模型的解釋;缺乏新方法&擔心可能會導致bug或頭痛的殘留代碼,以及爲什麼我堅持使用Propel(除了它看起來非常好的事實);我有一個工作ORM的現有示例。真的,我可以說上面的兩個答案都是我一起去的。多謝你們!