在 Doctrine 2.0 实体中使用 EntityManager

2023-11-27

我有 2 个实体:国家/地区(id、名称)和映射(id、对象、internalId、externalId)。 国家和映射不通过关联连接(因为映射不仅具有国家/地区的行)。我需要使用以下条件获取国家/地区的外部 ID:

  • country.id = mapping.internalId
  • mapping.object = 'country'

所以我计划在 Country 中添加函数 getExternalId()

function getExternalId() {
    $em = Registry::getEntityManager();

    $mapping = $em->getRepository('Mapping')->findOneBy(array(
        'object'     => 'country',
        'internalId' => $this->getId()
    ));

    return !empty($mapping) ? $mapping->getExternalId() : false;
}

问题:

  1. 在实体内部使用 EntityManager 是一个好习惯吗?如果不是,请解释一下在我的情况下如何获取外部 ID?
  2. 也许可以使用 yaml 文件关联国家/地区和地图?

提前致谢!


允许实体对象依赖实体管理器并不是一个好主意。它将实体与持久层联系起来,这是 Doctrine 2 专门试图解决的问题。依赖实体管理器的最大麻烦是它使您的模型难以脱离数据库进行隔离测试。

您可能应该依赖服务对象来处理依赖于实体管理器的操作。

// CountryService
public function getExternalId($country) {}

此外,您可以在模型上创建代理方法来调用外部设置的服务对象。在测试时,服务对象比实体管理器更容易模拟。

$country->setService($countryService);
$country->getExternalId();

// Country
public function getExternalId()
{
   $this->_service->getExternalId($this);
}  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Doctrine 2.0 实体中使用 EntityManager 的相关文章

随机推荐