php – 在Zend Framework中采用数据映射器方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 在Zend Framework中采用数据映射器方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1958字,纯文字阅读大概需要3分钟。
内容图文
![php – 在Zend Framework中采用数据映射器方法](/upload/InfoBanner/zyjiaocheng/775/468043916749472d914c3fc9644a9a92.jpg)
我们假设为Zend Framework应用程序设置了以下表格.
user (id)
groups (id)
groups_users (id, user_id, group_id, join_date)
我将Data Mapper方法应用于基本上给我的模型:
> Model_User,Model_UsersMapper,Model_DbTable_Users
> Model_Group,Model_GroupsMapper,Model_DbTable_Groups
> Model_GroupUser,Model_GroupsUsersMapper,Model_DbTable_GroupsUsers(用于保存可以看作实体的关系;注意“join_date”属性)
我在Model_DbTable_GroupsUsers中定义_referenceMap:
protected $_referenceMap = array (
'User' => array (
'columns' => array('user_id'),
'refTableClass' => 'Model_DbTable_Users',
'refColumns' => array('id')
),
'App' => array (
'columns' => array('group_id'),
'refTableClass' => 'Model_DbTable_Groups',
'refColumns' => array('id')
)
);
我有这些设计问题:
1)Model_Group仅镜像groups表中的字段.如何返回用户所属的组的集合以及用户为每个组加入该组的日期?如果我只是将属性添加到域对象,那么我必须让组映射器了解它,不是吗?
2)假设我需要获取用户所属的组.我应该把这个逻辑放在哪里? Model_UsersMapper或Model_GroupsUsersMapper?
我还想使用引用映射(依赖表)机制,并可能使用findManyToManyRowset或findDependentRowset,如:
$result = $this->getDbTable()->find($userId);
$row = $result->current();
$groups = $row->findManyToManyRowset(
'Model_DbTable_Groups',
'Model_DbTable_GroupsUsers'
);
当我可以在一个查询中编写它时,这将产生两个查询.我将把它放在Model_GroupsUsersMapper类中.
增强功能是将一个getGroups方法添加到Model_User域对象中,该对象在需要时通过调用数据映射器中的相应方法来懒惰地加载组,这对于第二个问题是必要的.我应该允许域对象了解数据映射器吗?
解决方法:
这可能是相当混乱的问题,因为关系数据库很难映射到对象模型.
我倾向于首先关注你的对象模型要求.例如,如果在您的对象模型中,您的用户对象(几乎)始终知道这些组是有意义的,那么这种关系应该合并到用户类中.另一方面,如果您经常需要使用用户而不需要知道他们所属的组,也许您可??以拥有两个用户类,一个基类和一个组感知扩展版本(base_user和group_user).
我会尽量避免让域对象知道数据层,因为这是使用这种模式的重点.数据层应该只是一个实例化域对象的哑工厂.
只是我对它的看法:)
内容总结
以上是互联网集市为您收集整理的php – 在Zend Framework中采用数据映射器方法全部内容,希望文章能够帮你解决php – 在Zend Framework中采用数据映射器方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。