Ответ 1
$name = "John Alex";
$birthday = "11-11-1990"; // I changed this
$student = new Student();
$student->setName($name);
$student->setBirthday(new \DateTime($birthday)); // setting a new date instance
// ...
У меня есть поле с именем "день рождения" в объекте doctrine.
Я хотел бы создать объект для добавления в базу данных с помощью доктрины.
Внутри контроллера:
$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
Edit:
Моя сущность:
/**
* @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;
}
$name = "John Alex";
$birthday = "11-11-1990"; // I changed this
$student = new Student();
$student->setName($name);
$student->setBirthday(new \DateTime($birthday)); // setting a new date instance
// ...
Поля ваших объектов, отображаемые как "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
значения даты рождения, чтобы избежать нарушения инкапсуляции (см. Doctrine2 ORM не сохраняет изменения в поле DateTime).
Чтобы установить день рождения, вы просто выполните следующее:
$student->setBirthday(new \DateTime('11-11-90'));