如何使用ZFcBase在ZF2中指定表之间的关系

时间:2014-08-19 21:14:27

标签: php zend-framework2

我是Zend Framework的新手。我正在使用使用以下数据库模式的应用程序:控制器 - >服务 - >映射器即可。 我对每个表都有一个实体和一个保湿器文件。我需要的是在SQL查询中连接表,但我不知道如何从连接表中访问结果,因为它只提供当前表的实体。这是我的代码:

控制器:

$userEntity = new \Portal\Entity\Iamuserdb();
$userEntity->setIamUserDbId($this->params('id'));
$service = $this->getServiceLocator()->get('Portal\Service\Reports');
$user = $service->getUserById($userEntity)

服务(报告):

protected $iamuserMapper;

public function selectUsers(){
$usuarios = $this->getIamUserMapper()->fetchAllUsers();
return $usuarios;
}

protected function getIamUserMapper()
{
if ($this->iamuserMapper == null) {
$this->iamuserMapper = $this->getServiceManager()->get('Portal\Mapper\Iamuser');
}
return $this->iamuserMapper;
}

Mapper(Iamuser):

public function fetchAllUsers()
{
$select = $this->getSelect();
$select->from('IAMUser')
->join('IAMUser_IAMGroup', 'IAMUser.iamUserDbId=IAMUser_IAMGroup.IAMUser_iamUserDbId', array('IAMUser_iamUserDbId', 'iamGroups_iamGroupDbId'), 'left')
->join('IAMGroup', 'IAMGroup.iamGroupDbId=IAMUser_IAMGroup.iamGroups_iamGroupDbId', array(), 'left');
return $this->select($select);
}

保湿:

class Iamuser extends Hydrator
{
protected function getEntity()
{
return 'Portal\Entity\Iamuserdb';
}

protected function getMap()
{
return array(
);
}
}

在我的Module.php模块中我有工厂:

'factories' => array(
'Portal\Mapper\Iamuser' => function($sm) {
$dbAdapter = new \Zend\Db\Adapter\Adapter($sm->get('Configuration')['db']);
$mapper = new Mapper\Iamuser();
$mapper->setEntityPrototype(new Entity\Iamuserdb())
->setHydrator(new Mapper\Hydrator\Iamuser())
->setDbSlaveAdapter($dbAdapter)
->setDbAdapter($dbAdapter);
return $mapper;
},
}

在我的mapper中看到我正在加入两个表,但是如何获取这些结果,因为它们来自另一个表并且不是在Entity类中提供的?提前致谢

1 个答案:

答案 0 :(得分:0)

我解决了我的问题。我所要做的就是回复这句话:

return $this->select($select)->getDataSource();

所以我跳过实体中的水化结果并得到原始的PDO数组,这样我就可以连接表了。