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