我有一个需要自定义水合逻辑的实体。我正在尝试为该实体创建一个自定义的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水合器,以便单个实体或映射实体的子集以这种方式自动补充?
答案 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?