Doctrine2定制水合物为单一实体

时间:2016-10-03 14:54:14

标签: php doctrine-orm symfony

我有一个需要自定义水合逻辑的实体。我正在尝试为该实体创建一个自定义的Doctrine2水合物。 Project是用Symfony3编写的,所以我写了一个简单的:

final class CustomHydrator extends AbstractHydrator
{
    protected function hydrateAllData()
    {
        return array_map(function(array $data) {
            // I'm doing that custom logic here
            $computedData = /* ... */
            return new EntityClass($computedData);
        }, $this->_stmt->fetchAll(\PDO::FETCH_ASSOC));
    }
}

该保湿器已在config.yml注册:

orm:
  entity_managers:
    default:
      hydrators: [CustomHydrator]

不幸的是,在任何地方都没有调用它,我找不到任何可以解释在Doctrine中钩住水合器的过程的文档。

问题是:如何创建自定义Doctrine水合器,以便单个实体或映射实体的子集以这种方式自动补充?

2 个答案:

答案 0 :(得分:2)

也许你可以创建第二个entityManager在那里设置默认的水合器,并用它处理这些实体?

orm:
  entity_managers:
    default:
      ...
    myCustom:
      ...

答案 1 :(得分:0)

config.yml中尝试以下配置:

orm:
    entity_managers:
        default:
            hydrators:
                CustomHydrator: \Your\Namespace\To\CustomHydrator

然后,在您的存储库中(或者在您检索实体的任何地方),您应该使用getResult方法进行自己的查询并使用保湿器:

$query->getResult('CustomHydrator');

此外,如果您需要在每次查询时调用保湿剂,已经询问过如何更改Doctrine默认保水器的问题:How to set the default hydrator in Doctrine?