0

我正在制作一个 ZF2 应用程序。我正在使用实体、映射器和服务(例如 UserEntity、UserMapper、UserService)来管理对象/模型。实体中的属性是 CamalCased(例如 FirstName、LastName),而在数据库中,字段使用下划线(first_name、last_name)。我将计划在检索或保存时使用水合器来映射属性和数据库字段。服务对象 (UserService) 将用于与映射器通信,以使用映射器检索和保存数据模型。hydrator 将转换 mapper 的结果并将它们转换为适当的实体。

我感到困惑的是,当服务 (UserService) 需要提供一些 cirteria - 例如查找具有特定“姓氏”的所有用户时,服务将使用数据库字段名称 (last_name) 还是实体属性名称 (LastName )?

如果服务中使用了 db 字段名称,那么 db 结构的任何更改都将需要我也更新服务,这完全没有使用整个方法的原因。

4

1 回答 1

0

如果您查看 ClassMethods:hydrate 方法(https://github.com/zendframework/zf2/blob/master/library/Zend/Stdlib/Hydrator/ClassMethods.php),您会看到它只是从一个对象到另一个对象。您可以选择将属性名称转换为/从 camelCase 转换,仅此而已。

如果您更改数据库中的列名,那么您将需要更改对象中相应的属性名称。反之亦然。我认为哪个是您问题的症结所在?

如果您想让表列名称独立于您的方法名称,那么您需要一些可以让您在某处定义实际映射表的东西。更改列或方法名称,您只需要更新配置映射表。

不是 ZF2 专家,所以我可能是错的,但看起来没有任何提供的保湿剂支持这一点。

我知道 Doctrine 2 支持它。

于 2013-08-28T15:14:49.793 回答