创建具有许多一对多关系的DAO查询?

时间:2010-01-24 18:03:21

标签: php mysql database oop dao

我正在使用PHP和MySQL开发一个Web应用程序。我有一个名为User的实体,其中包含许多一对多关系(与其他对象)(地址列表,电子邮件列表,PhoneNumbers列表等)。这些地址,电子邮件,电话号码通过数据库中的联结表(user_link_addresses,user_link_emails等)提供给用户。

我现在正在尝试为User实体创建一个高效的DAO,特别是方法readUserById($ userId)和readAllUsers()。但是,因为我是sql和DAO模式的业余爱好者,所以我无法正确创建这个DAO。

有人告诉我,将DAO保留在一次读取所有信息的查询中,然后可以相应地映射到该实体,这对网络效率很重要。这确实有意义,但是我无法生成一个查询,该查询具有来自所有内容的必要信息,并且可以正确映射到我的实体。

现在,我可以通过在获取用户后在循环内执行多个查询来获取此信息...我只是不喜欢这个想法(我确定它不正确)。此外,我知道如何使用连接表进行连接 - 只是没有这种复杂的东西,也需要正确映射。

表名称和字段

表:用户 FIELDS:user_id,用户名,密码

表:地址 FIELDS:address_id,street,city,state,zip_code,type

表:电子邮件 FIELDS:email_id,电子邮件,类型

表:phone_number FIELDS:phone_number_id,area_code,phone_number,type

- 协会的联结表 -

表:user_link_address FIELDS:user_id,address_id

表:user_link_email FIELDS:user_id,email_id

表:user_link_phone_number 字段:user_id,phone_number_id

无论如何,非常感谢所有帮助,

史蒂夫

1 个答案:

答案 0 :(得分:0)

有时候在查询中包含关联是有价值的,有时却不是。 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

如果你告诉我你所有的表名和字段,我可以帮你写一个更具体的查询。