PHP ORM框架Propel VS Doctrine

認識ORM其實最早源自一場爭論,各個框架都聲稱具備良好的ORM實現,但是使 用後發現,如果僅僅是強制返回數據對象還聲稱自己是ORM的話,那就貽笑大方了。那隻能說是僞ORM或是ORA(array)而已。很顯然返回的對象除了 屬性值外,還應該包括可執行方法,實現對數據的操作運用。

後來工作改用symfony 框架,該框架內置了對ORM框架PropelDoctrine 的 支持,symfony 1.2.*以前是採用propel作爲默認ORM框架,symfony 1.3以後官方將默認ORM框架改爲Doctrine。當然實際運用你可以自由切換,你也可以不用symfony直接在開發中採用Propel或 Doctrine。一番PK,最終在項目中採用了Doctrine作爲默認ORM框架。

以下將對Propel和Doctrine的異同做一個簡單對比,歡迎拍磚……

基本特性:
1)兩者只需簡單設置即可應用,支持常用CRUD操作;
2)兩者均支持自動生成model,每個表生成兩個model文件,也支持從原有數據庫生成model;有些數據庫數據類型轉過來的屬性類型可能不是完全一樣,是一個最接近的類型;
3)支持數據有效驗證和定義model關係;
4)支持單表繼承,支持字段自動賦值;
5)支持主從複製;
6)Doctrine支持全文搜索

文檔:
Doctrine的文檔一直就比Propel要全面豐富,社區更活躍

使用方法:
Propel和Doctrine基本CRUD操作很類似,但是涉及條件操作時區別就比較大了
1)propel查詢:
$criteria = new Criteria( ) ;
$criteria ->add ( JobeetJobPeer::CREATED_AT , time ( ) - 86400 * 30 , Criteria::GREATER_THAN ) ;
$this ->jobeet_job_list = JobeetJobPeer::doSelect ( $criteria ) ;

2)doctrine查詢:
$result = Doctrine_Query::create()->from("User")->where("name = 'caleng'")->excute();

明顯可以看出Doctrine的連貫寫法更加自然、更易閱讀、更接近原生SQL。

性能:
Doctrine > Propel

關鍵字:orm、symfonydoctrinepropel

發佈了64 篇原創文章 · 獲贊 2 · 訪問量 30萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章