У меня есть объект, который требует пользовательской логики гидратации. Я пытаюсь создать собственный гидратор Doctrine2 для этой сущности. Проект написан с использованием 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, чтобы таким образом автоматически гидратировался отдельный объект или поднабор отображенных объектов?
Может быть, вы могли бы создать второй entityManager, установить там гидратор по умолчанию и обработать эти объекты с ним?
orm:
entity_managers:
default:
...
myCustom:
...
Попробуйте следующую конфигурацию в вашем config.yml
:
orm:
entity_managers:
default:
hydrators:
CustomHydrator: \Your\Namespace\To\CustomHydrator
Затем в своем хранилище (или где бы вы ни извлекали ваши сущности) вы должны сделать свои собственные запросы и использовать свой гидратор в getResult
метод:
$query->getResult('CustomHydrator');
Кроме того, уже был задан вопрос о том, как изменить стандартный гидратор Doctrine, если вам нужно, чтобы ваш гидратор вызывался при каждом запросе: Как установить гидратор по умолчанию в Doctrine?