Имя свойства ZF2 в модели не соответствует столбцам базы данных

у меня есть 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)); ?

0

Решение

Я решил проблему для сопоставления столбцов моей базы данных с User Модель, установив стратегию именования на гидраторе, вот мой код:

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

Другие решения

В Doctrine вы работаете с объектной моделью, отдельной от вашей модели базы данных, что означает, что имена столбцов и имена свойств не обязательно совпадают. В своих определениях сущностей вы можете явно объявить имена столбцов, а затем Doctrine убедится, что имена свойств сопоставлены с правильными именами столбцов в UnitOfWork при сохранении изменений в базе данных.

Вы объявляете имена столбцов в @Column аннотации в определениях вашей сущности следующие:

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

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

Вы можете прочитать больше об этом в главе документации доктрины 4,3. Карта недвижимости.

Таким образом, вы можете иметь объектную модель, независимую от вашей модели базы данных. Таким образом, в вашей отладке вы видите свойства вашей объектной модели, а не имена столбцов базы данных. Я надеюсь, что это объяснение поможет вам понять различия.

0

По вопросам рекламы [email protected]