Propel
Propel是一個基於Apache Torque的對象持久層,需要PHP5支持.實際上,它讓你使用 對象 代替SQL 來讀寫數據庫表中的記錄.它提供了一個生成器來創建基於你的數據模型的SQL定義文件和相應的類文件,並有一個運行時引擎透明的處理對象持久和獲取工作.如果要定製生成的類將是很簡單的事情,XML, PHP類 和Phing構建工具使得把Propel集成到已有的應用程序框架也相當的容易.
Propel算是PHP中對ORM的實現,並且用到它的兄弟項目Creole作爲數據抽象層.
EZPDO
EZPDO 是一個輕量級的PHP ORM框架。旨在降低複雜的學習曲線,維持一個相當的運行速度和提供儘可能強大的功能。不過作者更新比較慢。好幾個月才能更新一個小版本。
以下引用自官方網站
Features 特性
Here is a quick look at the features in EZPDO before you delve into any details.
- Minimum SQL knowledge required
- 儘可能的SQL透明
- Requires minimum ORM specification
- 最小化的ORM配置
- No Phing! No need of explicit command line compile
- 不需要複雜的命令行操作
- Works with existing code and database
- 工作在已有的數據庫和代碼的基礎上
- Has a small runtime core to guarentee performance
- 有一個小的運行時核心以提高性能
- Handles 1:N, and M:N relationships automatically
- 可以自動處理1:N,M:N 的關係
- Provides a simple runtime API
- 提供一個簡單易懂的運行時API
- Supports object query (EZOQL)
- 支持對象查詢(EZOQL) 注: 仿照 Hibernate 的 HQL 起的名字,貌似未完全實現
- Auto generates database tables
- 自動生成數據庫表
- Test-driven with continuous integration
- 持續集成的測試驅動
Licence
EZPDO is an open source project and uses the BSD license.
BSD協議意味着你可以自由的使用,修改該軟件源碼,需要在你發佈的源碼包中包含BSD協議或者註明。
ORM in Frameworks
許多開發框架都對ORM有實現。
Picora 提供了一個類 ActiveRecord 的實現,同時提供了一個緩存和序列化的實現。當前的版本是 0.4 版。
ThinkPHP 是國內鼎鼎大名的PHP開源框架之一,在模板引擎上模仿了 Struts 。它提供了名爲 VO ( ValueObject ) 的 ORM 實現,由於沒有看過源碼,從使用方式上看,它的實現和 ezpdo 有一定類似之處。
FleaPHP 是國內另外一個著名的PHP開源框架,作者廖宇雷大俠(dualface),脾氣火暴。它提供了TableGateWay方式的 ORM 實現。
Zend Framework (ZF) 是 PHP 老母 Zend 公司的傑作,目前已經公佈了 1.0 production 版,除了提供對 SQL 語句的封裝以外,也同樣實現了 TableGateway 、 TableRowSet 、 TableRow 的實現。
總結
從功能上講,不管是 ActiveRecord 模式,還是 TableGateway ,對付簡單的查詢的確是可以降低開發難度,提高開發效率;但是它們對複雜關聯、SQL內嵌表達式的處理都不好。另外,由於php的對象持久化功能較弱,導致ORM的速度令人不敢恭維,測試結果普遍大約比Native SQL 慢10~50倍。
在大型項目中,期望使用ORM ,但是有可能出現的複雜情況讓我對 ORM 心存恐懼。如果強制使用 Pure SQL 很有可能會帶來數據緩存的衝突和 ORM 內部關聯的破壞。
這些讓我感到很失望,RDBMS 難道果真不是爲了OO設計的。沒有仔細的看過Hibernate ,不知道Hibernate的處理究竟有多強,但Hibernate 那繁雜的配置文件讓人望而生畏,我想這同樣不是ORM的真諦。
Django 中的 Models 模型雖然功能要比 Python 中最強大的 SQLAlchemy差一些,而且寫法也有些類似ZF中的db_select 但是藉於Python強大的自省功能, Django 的 Models 仍然是一個寫法優美、易於使用的ORM 。粗略得想,我認爲把 Django的 ORM 移植到 PHP 不會是很難的事情,但目前的我做到這點還有很大差距,所以期望有心人可以做這麼一次有益的嘗試。