我之前用symfony1.4+propel開發項目,現在改用symfony2.0了,但沒用過doctrine,但官方默認doctrine並去掉propel了。
1.使用doctrine有什麼優點呢?相對於propel來說。項目是系統方面。
2.用propel時,發現group by 不是很好用,是嗎?
3.doctrine應對多對多M:N關係時,處理得如何?
另外,我貼doctrine可能出現的問題,我是參考別人的:
1.文檔錯誤,要用options配置欄位額外選項,例如 unsigned、default屬性,官方文檔、產生的yml都是直接在欄位上指定。
2.外鍵無法指定unsigned、default
#
3.表關係是non-identifying relationship
感謝!
「標準的」Doctrine所支援的功能,是PDO所支援的各關係型資料庫(MySQL,PostgrelSql等)都具備的功能的集合,也就是說,所有A支援而B不支援的,Doctrine預設都不包含,但Doctrine有良好的擴充性和豐富的第三方程式碼,Baidu裡怎麼搜不知道,Google裡搜Doctrine+Extensions,會有很多收穫。
Doctrine多對多的支援還不錯,夠用。
在Symfony 2裡你還是可以用Propel,官網上文檔裡有專門的一章。
Doctrine和Propel都不錯(自己寫資料庫封裝,也可以是好同志),各選各好吧,非要比較的話,可以舉一些客觀的區別:
如前述,你所說的unsigned,這個特性不能跨資料庫,自然也就沒有被預設支持,但如果需要,辦法很多,不在這個答案中囉嗦。
default也不是能跨資料庫的屬性,但你可以在Doctrine的Entity類別裡,為做了映射的成員變量,定義一個預設值就可以了,夫復何求?
Doctrine的承諾就是跨庫通用,我認為好的程式碼就是只做自己承諾的事,從這一點出發,Doctrine還是可以讓人放心的。畢竟還有很多人在用PostgreSql或是SQLite,不要用MySQL的思考去強求一致。