Преобразование даты в строку при сохранении записи доктрины

Я пытаюсь перенести один из моих проектов PHP на Doctrine. Я никогда не использовал его раньше, поэтому есть несколько вещей, которых я не понимаю. В моем текущем коде у меня есть класс, похожий на этот:

class ScheduleItem {
   private Date start; //A PEAR Date object.
   private Date end;

   public function getStart() { return $this->start; }
   public function setStart($val) { $this->start = $val; }

   public function getEnd() { return $this->end; }
   public function setEnd($val) { $this->end= $val; }
}

У меня есть класс ScheduleItemDAO с такими методами, как save(), getByID() и т. Д. При загрузке из базы данных и сохранении в нее класс DAO преобразует объекты Date в строки и из строк, чтобы их можно было сохранить в поле отметки времени.

Пытаясь перейти на Doctrine, я создал новый класс вроде этого:

class ScheduleItem extends Doctrine_Record {
   public function setTableDefinition() {
      $this->hasColumn('start', 'timestamp');
      $this->hasColumn('end', 'timestamp');
   }
}

Я надеялся, что смогу использовать Date объектов для времени начала и окончания и преобразовать их в строки при сохранении в базе данных. Как я могу этого добиться?


person takteek    schedule 05.11.2009    source источник
comment
На всякий случай: meta.stackoverflow.com/questions/686/…;)   -  person Chris Williams    schedule 16.03.2010


Ответы (1)


Вы должны определять свою схему с помощью yaml. Используя файл yaml, вы можете создавать свои классы с помощью Интерфейс командной строки Doctrine. Вы также можете использовать CLI для генерации SQL для БД, а также для создания БД и таблиц.

Doctrine должна позаботиться о преобразовании вашей даты во что-то подходящее для вашей БД и обратно, когда вы загружаете свой объект.

Надеюсь это поможет.

person Chris Williams    schedule 06.11.2009
comment
Может быть, Doctrine - неподходящий инструмент для этой работы. Мой единственный опыт работы с ORM - это спящий режим, и я искал что-то подобное для этого проекта. По сути, мне нужен объект PHP, соответствующий записям в базе данных, но мне также нужна возможность добавлять к этим объектам свои собственные методы. Создание моих классов из yaml не позволяет мне этого делать. Я действительно не понимаю, чем объект Doctrine_Record лучше ассоциативного массива, если он не позволяет мне также определять действия над объектом. - person takteek; 08.11.2009
comment
У вас по-прежнему будет возможность добавлять собственный код к каждому объекту. По сути, Doctrine создаст для вас базовые классы. Итак, если у вас есть объект User, определенный в вашем yaml-файле, Doctrine создает: ‹куда бы вы ни указали свои модели› /generated/BaseUser.php и ‹куда бы вы ни указали свои модели› /User.php. Пользователь расширяет BaseUser. Вы можете добавить в User.php, и BaseUser.php будет единственным, что изменится, если / когда вы измените User в своем файле yaml. - person Chris Williams; 09.11.2009