0

我有一个User model包含一些属性 - 比如说firstName and lastName- 但在我的数据库中我将​​它们存储为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"
  ...
}

为什么数组键与数据库列不匹配,即使我使用$this->setHydrator(new ClassMethods(true));

4

2 回答 2

0

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

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

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

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

您可以在原则文档第4.3章中阅读更多相关信息。属性映射

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

于 2016-07-30T12:53:01.033 回答
0

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

$hydrator = new ClassMethods(false);
$namingStrategy = new \Zend\Hydrator\NamingStrategy\UnderscoreNamingStrategy();       
$hydrator->setNamingStrategy($namingStrategy);
于 2016-07-30T00:56:39.043 回答