у меня есть 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));
?
Я решил проблему для сопоставления столбцов моей базы данных с User
Модель, установив стратегию именования на гидраторе, вот мой код:
$hydrator = new ClassMethods(false);
$namingStrategy = new \Zend\Hydrator\NamingStrategy\UnderscoreNamingStrategy();
$hydrator->setNamingStrategy($namingStrategy);
В Doctrine вы работаете с объектной моделью, отдельной от вашей модели базы данных, что означает, что имена столбцов и имена свойств не обязательно совпадают. В своих определениях сущностей вы можете явно объявить имена столбцов, а затем Doctrine убедится, что имена свойств сопоставлены с правильными именами столбцов в UnitOfWork при сохранении изменений в базе данных.
Вы объявляете имена столбцов в @Column
аннотации в определениях вашей сущности следующие:
/** @Column(type="string", name="first_name") */
private $firstName;
/** @Column(type="string", name="last_name") */
private $lastName;
Вы можете прочитать больше об этом в главе документации доктрины 4,3. Карта недвижимости.
Таким образом, вы можете иметь объектную модель, независимую от вашей модели базы данных. Таким образом, в вашей отладке вы видите свойства вашей объектной модели, а не имена столбцов базы данных. Я надеюсь, что это объяснение поможет вам понять различия.