来自2个域模型的组合数据

时间:2010-01-31 11:04:47

标签: php model dns design-patterns

我正在尝试实施Data Gateway / Domain Pattern。我理解基础知识及其将域逻辑与持久数据层分离的奇妙模式。现在我有以下要求:

假设我有2个域名模型:用户和公司(ies)。当我想要检索所有用户的用户列表时,我会做类似的事情:

$userGateway = new Model_UserGateway();

$users = $userGateway->fetchAll();

foreach ($users as $user) {...}

工作得非常好,但现在是棘手的部分:我现在想要一个包含所有用户及其相应公司的列表。我可以为相关公司的每个用户迭代用户和实例,但那......不是我最喜欢的解决方案。在最坏的情况下,我生成嵌套的数据库查询。另一种方法是,我用网关获取额外的用户数据并处理它们......我不知道:(

获得包含公司信息的用户列表是最好的实践吗?

提前致谢

迈克尔M

1 个答案:

答案 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