模型中的ZF2属性名称与数据库列不对应

时间:2016-07-29 15:53:54

标签: php forms doctrine-orm zend-framework2 hydration

我有一个User model,其中包含一些属性 - 比方说firstName and lastName - 但在我的数据库中,我将它们存储为{{1} }} first_name and

last_name User里面我像这样使用保湿器:

Form

调试显示:

$this->setHydrator(new ClassMethods(true));

为什么数组键与数据库列不匹配,即使我使用array(5) { ["firstName"] => string(13) "my first name" ["lastName"] => string(12) "my last name" ... }

2 个答案:

答案 0 :(得分:0)

我解决了将数据库列映射到User模型的问题,方法是在保护器上设置命名策略,这是我的代码:

$hydrator = new ClassMethods(false);
$namingStrategy = new \Zend\Hydrator\NamingStrategy\UnderscoreNamingStrategy();       
$hydrator->setNamingStrategy($namingStrategy);

答案 1 :(得分:0)

在Doctrine中,您使用与数据库模型分开的对象模型,这意味着列名和属性名不一定相同。在您的实体定义中,您可以显式声明列名称,然后在持久更改数据库时,Doctrine将确保属性名称映射到 UnitOfWork 中的正确列名。 / p>

您在实体定义中的@Column注释中声明列名称,如下所示:

/** @Column(type="string", name="first_name") */
private $firstName;

/** @Column(type="string", name="last_name") */
private $lastName;

您可以在此in the doctrine documentation chapter 4.3. Property mapping上阅读更多内容。

像这样,您可以拥有一个独立于数据库模型的对象模型。因此,在调试中,您会看到对象模型属性,而不是数据库列名。我希望这个解释可以帮助你理解这些差异。