改用symfony2.0開發項目,想提點問題
某草草
某草草 2017-05-16 16:46:03
0
1
503

我之前用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

感謝!

某草草
某草草

全部回覆(1)
刘奇

「標準的」Doctrine所支援的功能,是PDO所支援的各關係型資料庫(MySQL,PostgrelSql等)都具備的功能的集合,也就是說,所有A支援而B不支援的,Doctrine預設都不包含,但Doctrine有良好的擴充性和豐富的第三方程式碼,Baidu裡怎麼搜不知道,Google裡搜Doctrine+Extensions,會有很多收穫。

Doctrine多對多的支援還不錯,夠用。

在Symfony 2裡你還是可以用Propel,官網上文檔裡有專門的一章。

Doctrine和Propel都不錯(自己寫資料庫封裝,也可以是好同志),各選各好吧,非要比較的話,可以舉一些客觀的區別:

  1. Doctrine是Data Mapper+Proxy模式,Propel是Active Record模式(這是哲學問題);
  2. Doctrine的社區較活躍;
  3. Symfony 2使用Doctrine的Common函式庫來實現的基於註解(annotation)的依賴注入(DI);
  4. Doctrine比較現代一些(2.x),對PHP 5.3+的特性支援較好,但Propel也在趕上。

如前述,你所說的unsigned,這個特性不能跨資料庫,自然也就沒有被預設支持,但如果需要,辦法很多,不在這個答案中囉嗦。

default也不是能跨資料庫的屬性,但你可以在Doctrine的Entity類別裡,為做了映射的成員變量,定義一個預設值就可以了,夫復何求?

Doctrine的承諾就是跨庫通用,我認為好的程式碼就是只做自己承諾的事,從這一點出發,Doctrine還是可以讓人放心的。畢竟還有很多人在用PostgreSql或是SQLite,不要用MySQL的思考去強求一致。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板