ZF2 - 如何使用Hydrator/exchangeArray()填充嵌套对象

Int*_*lix 9 php oop zend-framework2

我有一个存储在我的数据库中的值的对象.我的对象还包含另一个对象,它只使用它的ID(外键)存储在数据库中.

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

Hydrator/exchangeArray在ZF2中的功能之前,您将使用Mapper来获取创建对象所需的一切.现在我试图通过仅使用Hydration/exchangeArray填充我的对象来消除这个额外的图层,但是在创建嵌套对象时有点困难.

我的实体是否应该将Inner对象的表注入其中,以便在将其ID传递给我的'exchangeArray'时创建它?

以下是示例实体作为示例.

// Village
id, name, position, square_id

// Map Square
id, name, type
Run Code Online (Sandbox Code Playgroud)

将square_id发送到我的Village的exchangeArray()函数.它将获得mapTable并使用水合器使用我拥有的ID拉入方块.

在我的实体中有映射器实例似乎是不对的,因为我认为它们应该与任何东西断开连接,除了它自己的实体特定的参数和功能?

DrB*_*eza 5

我想你可能会从中受益Zend\Stdlib\Hydrator\Strategy\StrategyInterface.

通过创建一个Strategy类,你可以将它附加到你的Hydrator,所以当找到一个特定的键(在这种情况下是square_id)时,Hydrator将数据传递给Strategy类到extract()hydrate().

然后,策略类可以执行水合和提取数据所需的任何操作.我使用了几个策略类,简单地getArrayCopy()/ exchangeArray()和其他策略来水合/提取多个实体.