我正在使用 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 字段:phone_number_id, area_code, phone_number, type
-- 关联的连接表 --
表:user_link_address 字段:user_id,address_id
表:user_link_email 字段:user_id,email_id
表:user_link_phone_number 字段:user_id,phone_number_id
无论如何,非常感谢所有帮助,
史蒂夫
最佳答案
有时在查询中包含关联是值得的,有时则不然。 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
如果你告诉我你所有的表名和字段,我可以帮你写一个更具体的查询。
关于php - 创建具有许多一对多关系的 DAO 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2128092/