创建具有多个一对多关系的 DAO 查询?
Posted
技术标签:
【中文标题】创建具有多个一对多关系的 DAO 查询?【英文标题】:Creating a DAO Query with many One-to-Many Relationships? 【发布时间】:2011-01-08 20:14:37 【问题描述】:我正在使用 php 和 mysql 开发一个 Web 应用程序。我有一个名为 User 的实体,其中有许多一对多的关系(与其他对象)(地址列表、电子邮件列表、电话号码列表等)。这些地址、电子邮件、电话号码通过数据库中的连接表(user_link_addresses、user_link_emails 等)提供给用户。
我现在正在尝试为用户实体创建一个高效的 DAO,特别是方法 readUserById($userId) 和 readAllUsers()。但是,由于我是 sql 和 DAO 模式的业余爱好者,因此无法正确创建此 DAO。
有人告诉我,将您的 DAO 保持在一个查询中,该查询一次读取所有信息,然后可以相应地映射到该实体,这对网络效率很重要。这确实是有道理的,但我无法生成 一个 查询,该查询包含所有内容的必要信息并且可以正确映射到我的实体。
现在,我可以通过在获取用户后在一个循环中执行多个查询来获取此信息......我只是不喜欢这个想法(而且我确信它不正确)。此外,我知道如何使用联结表进行连接 - 只是不使用如此复杂且需要正确映射的东西。
表格名称和字段
表:用户 字段:user_id、用户名、密码
表:地址 字段:address_id、街道、城市、州、邮政编码、类型
表格:电子邮件 字段:email_id、电子邮件、类型
表格:电话号码 字段:phone_number_id、area_code、phone_number、类型
-- 关联的连接表--
表:用户链接地址 字段:user_id、address_id
表:user_link_email 字段:user_id、email_id
表格:user_link_phone_number 字段:user_id、phone_number_id
无论如何,非常感谢所有帮助,
史蒂夫
【问题讨论】:
【参考方案1】:有时在查询中包含关联是值得的,有时则不然。 Ruby on Rails 有一个非常简洁的插件,可以在应用程序运行时分析它,并告诉你哪些查询应该包含相关模型。
你可以试试这样的:
SELECT *
FROM `user`
INNER JOIN `user_link_addresses`
ON `user`.id = `user_link_addresses`.user_id
INNER JOIN `user_link_foo`
ON `user`.id = `user_link_foo`.user_id
如果你告诉我你所有的表名和字段,我可以帮你写一个更具体的查询。
【讨论】:
感谢您的回复!我在原始帖子中提供了表名和字段。我相信您编写的提供的代码只会获得地址 id 和 foo id 的关联,而不是每个的信息。 你确定吗,stjowa?看看这里给出的例子:en.wikipedia.org/wiki/Join_(SQL)#Inner_join——它从连接表中选择所有字段。 对不起,Eli,我之前不是很清楚...我的意思是查询不会给我所需的实际地址信息或 foo 信息。它会给我表中的所有信息,user_link_address 和 user_link_foo,但不是表中的信息,地址和 foo(user_link_address 和 user_link_foo 表只是连接表,不是存储“真实”信息的地方)。如果您注意到上面提供的表格和字段,它可能会解释得更多。以上是关于创建具有多个一对多关系的 DAO 查询?的主要内容,如果未能解决你的问题,请参考以下文章