Подтвердить что ты не робот

Как установить дату в Доктрине 2?

У меня есть поле с именем "день рождения" в объекте 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;
}
4b9b3361

Ответ 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
// ...

Ответ 2

Поля ваших объектов, отображаемые как "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'));