【发布时间】:2012-03-26 10:56:49
【问题描述】:
首先让我声明我们使用 php 和 postgre 数据库。在我们的项目中,由于 sql 查询过载,我们决定不使用任何 ORM,我们采取了相反的方式。
假设您从多个表中进行选择,假设加入了 id 列。例如:
- 表:users(id, name), items(id, name, description), cmets(user_id, item_id, text, rating)
所以基本上你有一个用户表、一些项目表和一个与一个用户和一个项目相关的 cmets 表。
您创建两个对象 - 用户和项目代表他们的表格行。然后你想创建一个评论对象。在 ORM 中,它将包含对象 user 和 item 并且他们会用他们的查询加载自己,但这将是两个查询,你在想......嗯,但我可以用一个查询选择那个数据......但是如何?
想象一下你有这个选择:
SELECT * FROM comments JOIN users ON comments.user_id = users.id JOIN items ON comments.item_id = items.id
(你也可以想象一个 WHERE 子句带有指定的 item id 或 user id 等)
那么你如何将这样一个选择的结果拆分到这个类结构中,假设你想要一个评论对象列表:
- 用户
- 项目
- 评论(包含对用户和项目对象的引用)
到目前为止,我们的理论解决方案是为列的名称加上固定前缀:),然后将结果传播到对象结构中,每个对象从选择中获取它需要的内容。还有其他解决方案吗?让我们说更复杂?
感谢您的任何想法
PS:显然我使用了一个非常简单的例子,但试着想象问题要大得多,结构要复杂得多
【问题讨论】: