У меня есть объект со значениями, которые хранятся в моей базе данных. Мой объект также содержит другой объект, который хранится в базе данных, используя только его идентификатор (внешний ключ).
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()
и другие стратегии, которые гидратируют / извлекают несколько объектов.