Php Doctrine2用于单个实体的自定义或
我有一个需要自定义逻辑的实体。我正在尝试为该实体创建一个自定义Doctrinor。项目是用Symfony3编写的,因此我编写了一个简单的项目:Php Doctrine2用于单个实体的自定义或,php,doctrine-orm,symfony,Php,Doctrine Orm,Symfony,我有一个需要自定义逻辑的实体。我正在尝试为该实体创建一个自定义Doctrinor。项目是用Symfony3编写的,因此我编写了一个简单的项目: final class CustomHydrator extends AbstractHydrator { protected function hydrateAllData() { return array_map(function(array $data) { // I'm doing that
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]
orm:
entity_managers:
default:
hydrators:
CustomHydrator: \Your\Namespace\To\CustomHydrator
不幸的是,它没有被称为任何地方,我没有找到任何文件,可以解释挂在学说水合器的过程
问题是:如何创建自定义实体或使单个实体或映射实体的子集以这种方式自动水合?在
config.yml
中尝试以下配置:
orm:
entity_managers:
default:
hydrators: [CustomHydrator]
orm:
entity_managers:
default:
hydrators:
CustomHydrator: \Your\Namespace\To\CustomHydrator
然后,在存储库中(或在检索实体的任何地方),您应该进行自己的查询,并在getResult
方法中使用您的查询或:
$query->getResult('CustomHydrator');
此外,已经有人问了一个问题:如何更改默认水合器,或者是否需要在每次查询时调用水合器:也许您可以创建第二个entityManager,在那里设置默认水合器,并使用它处理这些实体
orm:
entity_managers:
default:
...
myCustom:
...
谢谢,但我正试图找到一种方法,迫使条令自动水合这个实体,而不提及水合作用或名称。有一个项目有几十个实体,现在根本不可能找到每个
find*
调用。然后,按照链接中的说明设置默认水合器应该可以做到这一点(我自己从未尝试过,但如果它是默认水合器,我想即使是find*方法也会使用它?)所以不可能直接为实体创建一个水合器?我是否需要为整个EntityManager
创建自己的全局管理器?我想是的。如果您只需要该实体的hydrator,我建议您创建一个抽象存储库,覆盖find*
方法,以使用该hydrator进行查询,并创建需要使用该hydrator或扩展该抽象存储库的实体的存储库。这看起来有点混乱,但根据你的需要,这是我现在能想到的最好的解决方案。当然我可以,但这与我试图实现的目标背道而驰。最终的答案是,这不能按照我在教义中所希望的方式来做。我知道这是一个老问题,但我希望执行与你相同的操作。您是否偶然考虑实体事件来执行后加载逻辑?