我正在尝试实施Data Gateway / Domain Pattern。我理解基础知识及其将域逻辑与持久数据层分离的奇妙模式。现在我有以下要求:
假设我有2个域名模型:用户和公司(ies)。当我想要检索所有用户的用户列表时,我会做类似的事情:
$userGateway = new Model_UserGateway();
$users = $userGateway->fetchAll();
foreach ($users as $user) {...}
工作得非常好,但现在是棘手的部分:我现在想要一个包含所有用户及其相应公司的列表。我可以为相关公司的每个用户迭代用户和实例,但那......不是我最喜欢的解决方案。在最坏的情况下,我生成嵌套的数据库查询。另一种方法是,我用网关获取额外的用户数据并处理它们......我不知道:(
获得包含公司信息的用户列表是最好的实践吗?
提前致谢
迈克尔M答案 0 :(得分:0)
在fetchAllWithCompany
中实施Model_UserGateway
之类的方法。在此方法中,您执行数据库查询以从两个表中获取信息。 E.g。
SELECT *
FROM user
LEFT JOIN company ON user.id = company.user_id
然后您将获得所需的所有信息:
$users = $userGateway->fetachAllWithCompany();
这就是我这样做的方式。正如您所说,为每个用户创建一个查询以使其成为公司并不好。
修改强>
假设您的User
对象有getCompany
方法,您可以执行以下操作:
foreach($users as $user) {
$company = $user->getCompany()
}
当然getCompany
应该返回Company
个对象。
你想实现这个来学习吗?因为许多框架支持这种类型的数据库抽象,例如Zend framework。