【发布时间】:2011-03-27 04:13:38
【问题描述】:
下面的引述已经说服最终采用 ORM。在过去,我真的不喜欢 ORM 并将其作为一种愚蠢的 sql 方式写下来。在sql中处理分层数据是我不想处理的痛苦。
我们拥有这些“对象-关系映射器”是有原因的,这是因为一个称为对象-关系阻抗不匹配的问题。基本上,用于确保数据库保持完整的正式数学模型遵循具有行和列以及对其他表的引用的表系统,而我们今天使用的大多数编程语言中的数据结构以嵌套的树状结构操作数据。这很像电子表格和 XML 文档之间的区别,或者分类账和家谱图之间的区别。 - http://zork.net/motd/nick/django/your-favorite-orm-sucks.html
我想要一些设置工作最少的东西。我的大部分项目都很小,所以当我只将它们用于少数查询时,我不想花太多时间定义模型。
我使用 codeigniter 作为 php 框架和 MySQL 作为数据库。
【问题讨论】:
-
Good PHP ORM Library? 和 many others 的可能重复项
-
没有任何递归或分层查询支持的数据库中的分层数据是您的问题。 PostgreSQL 将是一个可行的替代方案,尽管现在有免费的 SQL Server 和 Oracle 版本可用......
-
@OMG Ponies 所以基本上问题是 mySQL 不支持对象,所以获取数据的唯一方法是递归查询或执行一堆左连接并最终得到冗余数据?我只是简单地处理了oracle,存储过程是正确的工具,还是查询实际上可以返回对象中的分层数据?
-
Oracle 从 v2 开始支持分层查询,使用
CONNECT BY语法。执行此操作的 ANSI 方法是使用递归 WITH 子句,Oracle 直到 11g R2 才支持该子句,而 SQL Server 2005+ 是(导致 ANSI 接受)。我不清楚 PostgreSQL 的哪个版本开始递归 WITH 支持 - 我相信是 8.x。 -
@OGM Ponies 我查看了 oracle 示例,它看起来非常整洁。我想获得任意长度的树的最简单方法是左连接并使用一些 php 循环将所有内容移动到嵌套数组中。我认为这比为我的小项目设置 ORM 更容易。任何事情都胜过递归查询。不幸的是,我坚持使用 MySQL,但阅读 WITH RECURSIVE 和 CONNECT BY 很有趣
标签: php sql orm codeigniter