Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как установить дату в Doctrine 2?

Автор вопроса: AkrramoОтветов: 1

У меня есть поле с именем "день рождения" в сущности доктрины.

Я хотел бы создать объект для добавления в базу данных с помощью доктрины.

Внутри контроллера:

$name = "John Alex";
$birthday = "11-11-90";
$student = new Student();
$student->setName($name);
$student->setBirthday(strtotime($birthday);
...

но когда я пытаюсь продолжить, я получаю эту ошибку

Fatal error: Call to a member function format() on a non-object in /Library/WebServer/Documents/Symfony/vendor/doctrine-dbal/lib/Doctrine/DBAL/Types/DateType.php on line 44

Изменить:

Моя сущность:

/**
 * @var string $name
 *
 * @ORM\Column(name="name", type="string", length=255)
 */
private $name;

/**
 * @var date $birthday
 *
 * @ORM\Column(name="birthday", type="date", nullable=true)
 */
private $birthday;

/**
 * Set birthday
 *
 * @param date $birthday
 */
public function setBirthday($birthday)
{
    $this->birthday = $birthday;
}

/**
 * Get birthday
 *
 * @return date
 */
public function getBirthday()
{
    return $this->birthday;
}
  • Не могли бы вы показать нам свою сущность, связанную со Студентом? И вы проверили этот ответ ? j0k 31.05.2012
  • pastebin.com/8D7tdSef (я не могу редактировать тему) Akrramo 31.05.2012
  • Вы проверили этот ответ? - о дате и времени j0k 31.05.2012

symfonydoctrinedoctrine-orm

Ответы

Ответ 1 · рейтинг 28 · Ocramius

Поля ваших сущностей, отображаемые как "datetime" или "date", должны содержать экземпляры DateTime.

Следовательно, ваш сеттер должен иметь следующий тип:

/**
 * Set birthday
 *
 * @param \DateTime|null $birthday
 */
public function setBirthday(\DateTime $birthday = null)
{
    $this->birthday = $birthday ? clone $birthday : null;
}

/**
 * Get birthday
 *
 * @return \DateTime|null
 */
public function getBirthday()
{
    return $this->birthday ? clone $this->birthday : null;
}

Это позволяет установить либо null, либо экземпляр DateTime для дня рождения.

Как вы заметили, я также clone указываю значения даты рождения, чтобы избежать нарушения инкапсуляции (см. a-datetime-field/15488230#15488230">Doctrine2 ORM не сохраняет изменения в поле DateTime ).

Чтобы установить день рождения, вы просто делаете следующее:

$student->setBirthday(new \DateTime('11-11-90'));

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы