我有一个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"
...
}
?
答案 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上阅读更多内容。
像这样,您可以拥有一个独立于数据库模型的对象模型。因此,在调试中,您会看到对象模型属性,而不是数据库列名。我希望这个解释可以帮助你理解这些差异。