Поле даты сохранения с доктриной

В моем приложении я сохраняю данные с доктриной в базе данных MySQL. для меня вполне достаточно сохранить дату, а не время, поэтому я выбрал формат даты для своего поля базы данных.

В сущности моего приложения Symfony 4 это выглядит так:

/**
 * @var DateTime
 *
 * @ORM\Column(name="create_date", type="date", nullable=false, options={"default" = "CURRENT_TIMESTAMP"})
 * @Assert\NotBlank
 */
private $createDate;


/**
 * @param DateTime $createDate
 *
 * @return Asset
 */
public function setCreateDate(DateTime $createDate)
{
    $this->createDate = $createDate;

    return $this;
}

Результирующий оператор SQL выглядит следующим образом:

INSERT INTO asset 
(name, create_date, beide, comment, amount, user_id, category_id) 
VALUES 
("Schmeckerlis","2019-01-19 16:03:53",0,"",7.34,345,345)

Как видите, время добавлено. Это как вы настраиваете поле даты с доктриной?

Должен ли я изменить его на поле DateTime или Timestamp?

Должен ли я удалить значение по умолчанию в сущности?

https://www.doctrine-project.org/projects/doctrine-dbal/en/2.6/reference/types.html говорит следующее:

"date: наносит на карту и преобразует данные даты без информации о времени и часовом поясе. Если вы знаете, что данные, которые должны храниться, всегда должны быть только датой без информации о времени и часовом поясе, вам следует рассмотреть возможность использования этого типа. Значения, извлеченные из базы данных, всегда преобразован в PHP \DateTime объект или нуль, если данные отсутствуют."

1 ответ

CURRENT_TIMESTAMP возвращает дату и время как YYYY-MM-DD HH-MM-SS, Если я вас правильно понимаю, вам нужно только YYYY-MM-DD часть.

Для этого вы должны удалить options={"default" = "CURRENT_TIMESTAMP"} и сделать это в методе конструктора объекта. Этот вызывается каждый раз, когда вы делаете new Entity(),

public function __construct()
{
    $date = new \DateTime();
    $this->createDate = $date->format('Y-m-d');
}
Другие вопросы по тегам