Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Zend框架中采用数据映射器方法_Php_Model View Controller_Design Patterns_Zend Framework_Datamapper - Fatal编程技术网

Php 在Zend框架中采用数据映射器方法

Php 在Zend框架中采用数据映射器方法,php,model-view-controller,design-patterns,zend-framework,datamapper,Php,Model View Controller,Design Patterns,Zend Framework,Datamapper,让我们假设Zend Framework应用程序的设置如下表所示 user (id) groups (id) groups_users (id, user_id, group_id, join_date) 我采用数据映射器方法处理模型,该方法基本上为我提供: 模型用户,模型用户页面,模型数据库用户 模型组,模型组映射,模型表组 模型组用户,模型组用户映射器,模型表组用户(用于保存可视为实体的关系;请注意“加入日期”属性) 我正在Model_DbTable_GroupUsers中定义_refe

让我们假设Zend Framework应用程序的设置如下表所示

user (id)
groups (id)
groups_users (id, user_id, group_id, join_date)
我采用数据映射器方法处理模型,该方法基本上为我提供:

  • 模型用户模型用户页面模型数据库用户
  • 模型组模型组映射模型表组
  • 模型组用户模型组用户映射器模型表组用户(用于保存可视为实体的关系;请注意“加入日期”属性)
我正在Model_DbTable_GroupUsers中定义_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) 模型组仅镜像组表中的字段。如何返回用户所属组的集合以及每个组的用户加入该组的日期?如果我只是将属性添加到域对象中,那么我必须让组映射器知道它,不是吗

2) 假设我需要获取用户所属的组。我应该把这个逻辑放在哪里模型用户映射器模型组用户映射器

我还想利用引用映射(依赖表)机制,并可能使用findManyToManyRowset或findDependentRowset,类似于:

$result = $this->getDbTable()->find($userId);
$row = $result->current();

$groups = $row->findManyToManyRowset(
    'Model_DbTable_Groups',
    'Model_DbTable_GroupsUsers'
);
这将产生两个查询,而我可以在一个查询中编写它。我将把它放在Model_GroupsUserMapper类中


一个增强是向Model_User domain对象添加一个getGroups方法,该方法在需要时通过调用数据映射器中的适当方法延迟加载组,这就引出了第二个问题。我应该让域对象知道数据映射器吗?

这可能是一个非常令人困惑的问题,因为关系数据库很难映射到对象模型

我倾向于首先关注您的对象模型需求。例如,如果在您的对象模型中,您的用户对象(几乎)总是知道组是有意义的,那么应该将此关系合并到用户类中。另一方面,如果您经常需要使用用户,而不需要知道他们是哪些组的一部分,那么您可能有两个用户类,一个基类和一个组感知扩展版本(基类用户和组用户)

我会尽量避免让域对象知道数据层,因为这是使用这种模式的关键。数据层应该只是一个实例化域对象的哑工厂


就我的看法:)

但是检索组列表(到目前为止只是一个组对象数组)以及每个组的用户数如何?我是否应该返回一个数组数组,其中每个小数组都有两个属性—组对象和用户计数?