【问题标题】:How to specify relationships between tables in ZF2 using ZFcBase如何使用 ZFcBase 在 ZF2 中指定表之间的关系
【发布时间】:2014-08-22 05:16:25
【问题描述】:

我是 Zend 框架的新手。我正在使用使用以下数据库模式的应用程序:Controler -> Service -> Mapper。 我有一个 entity 用于每个表和一个 hydrator 文件。我需要的是在 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;
}

映射器(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;
},
}

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

【问题讨论】:

    标签: php zend-framework2


    【解决方案1】:

    我解决了我的问题。我所要做的就是返回这个声明:

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

    所以我跳过实体中的水合结果并获取原始 PDO 数组,这样我可以加入表。

    【讨论】:

      猜你喜欢
      • 2020-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 2015-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多