除了Symfony之外,我还看过Doctrine这个ORM。那里也需要创建描述数据结构的yaml文件。数据库已经定义了这些内容。有什么方法可以读取我的表定义,而无需生成和存储配置文件?
我是Doctrine的忠实粉丝,它是一个功能齐全的ORM,将替代Propel成为Symfony的默认ORM。
它具备基本ORM功能,同时还有一个功能完善的查询构建器,我觉得非常好用。
它配备了一套命令行工具来管理您的数据库。例如,您可以使用YAML创建模式和fixtures,并让Doctrine基于模式生成类,创建数据库,根据模型创建模式,然后使用一个单独的./doctrine build-all-reload
命令填充数据库。
它还包括支持数据库迁移,并最近更新了迁移功能以自动差异比较和生成迁移模型。
根据您的Doctrine投诉,您可以运行命令./doctrine generate-models-db
或./doctrine generate-yaml-db
,从当前的数据库设置中自动生成模型和yaml文件。
其他方便之处包括“Behaviors”,在实现特定的模式时会使生活变得更容易。例如,您可以将“Timestampable”行为添加到类文件中。Doctrine会自动添加“created_at”和“updated_at”列,填充它们,并且每次运行$object->save()
命令时都会自动更新“updated_at”列。更复杂的行为包括i18n、表版本控制和树(但实际上只有NestedSet)。
个人而言,我非常喜欢Doctrine,并且总是随机分享我的感受。
我使用一个名为redbean的鲜为人知的orm层。 你可以在这里找到它:http://www.redbeanphp.com。 它绝对是独一无二的,因为它可以自动创建表格、列和索引,而无需任何配置文件。我发现它可以大大节省时间!
CodeIgniter(http://codeigniter.com/user_guide/database/active_record.html)和它的PHP5分支Kohana(http://docs.kohanaphp.com/libraries/orm)都包含ActiveRecord模式的实现。
我自己创建了一个没有冗余的版本。(虽然我需要更新我的现场资源)
我创建它时考虑到了你提到的所有要点:没有成堆的xml文件,没有庞大的框架,只有简单的构造函数和数据库属性映射,可以完成基本的CRUD / Find / Join操作。对于我大部分的工作,我甚至不需要编写自定义查询。
我以前在我的网站上已经写过所有这些内容,还请确保查看基本示例以了解其思想。
下一个版本将带有可行的一行加入加入(通过数据库中的“路径”进行遍历),基于ini的数据库设置,跨数据库支持,超级简单的数据库抽象和标准日志记录器,如果你的数据库出现问题,则回退到SQLite。
如果您对更新感兴趣,请告诉我,我会抓紧时间发布。
哦,还有别忘了,还有一个很棒的视觉脚手架生成器叫做Pork.Generator。它试图分析您的数据库结构并查找1:1、1:多和多:多关系,并可以自动生成类:-)
(来源: schizofreend.nl)
Zend_Db_Table和Zend_Db_Table_Row非常适合您所描述的内容。您不需要任何配置文件,大多数元数据都是从数据库本身“发现”的。
从技术上讲,这些类没有实现ActiveRecord模式。相反,它们实现了Table Data Gateway和Row Data Gateway模式。总体而言,这些模式提供了与ActiveRecord类似的价值,并且在某些方面比ActiveRecord更加灵活。
但是,像任何ORM一样,难免会有一些无法通过OO接口完成的SQL查询和操作。没有ORM可以作为一站式购物。
注:我曾在Zend Framework项目上工作了一年多,特别是在Zend_Db组件上。但是我现在已经不在他们那里工作了。
检查可维护性框架。虽然我更喜欢代码生成而不是ActiveRecord(运行时反射),但我发现可维护性框架在ORM功能方面特别易于使用。
如果您想使用基于代码生成的框架,可以尝试QCodo。无论dcousineau对Doctrine说了什么,我也可以对Qcodo说同样的话。这是一个仿照.NET / Delphi的事件驱动的全功能框架。但是您可以只使用代码生成功能,并找到将生成的类与框架的其他部分分离的方法。因此,您可以将生成的类嵌入到其他框架中。我推荐使用QCubed。它是一个非常强大的PHP5 ORM框架,专注于代码生成、UI脚手架和快速应用程序开发。请查看培训视频:http://qcu.be/content/video-screencasts
优点
缺点