ZF2 – Как использовать Hydrator / exchangeArray () для заполнения вложенного объекта

У меня есть объект со значениями, которые хранятся в моей базе данных. Мой объект также содержит другой объект, который хранится в базе данных, используя только его идентификатор (внешний ключ).

http://framework.zend.com/manual/2.0/en/modules/zend.stdlib.hydrator.html

Перед функциональностью Hydrator/exchangeArray в ZF2 вы использовали Mapper для захвата всего, что вам нужно для создания объекта. Теперь я пытаюсь устранить этот дополнительный слой, просто используя Hydration/exchangeArray для заполнения моих объектов, но я немного застрял на создании вложенного объекта.

Должна ли моя сущность иметь вложенную в нее таблицу объекта Inner, чтобы я мог ее создать, если идентификатор ее передан моему «exchangeArray»?

Ниже приведены примеры объектов.

 // Village id, name, position, square_id // Map Square id, name, type 

После отправки square_id в функцию exchangeArray () моей деревни. Он получил бы mapTable и использовал гидратор, чтобы вытащить квадрат, используя идентификатор, который у меня есть.

Не похоже, чтобы у меня были экземпляры mapper внутри моего объекта, поскольку я думал, что они должны быть отключены от чего-либо, кроме собственных параметров и функциональных возможностей конкретного объекта?

Я думаю, вам будет полезно посмотреть на Zend\Stdlib\Hydrator\Strategy\StrategyInterface .

Создав класс Strategy, вы можете прикрепить его к своему гидратору, поэтому, когда конкретный ключ найден (квадрат в этом случае), Hydrator передает данные в класс Strategy либо для extract() либо для hydrate() .

Затем класс Strategy может делать все, что требуется для гидратации и извлечения данных. Я использую пару классов стратегии, которые просто getArrayCopy() / exchangeArray() и другие стратегии, которые гидратируют / извлекают несколько объектов.