Поле даты сохранения с доктриной
В моем приложении я сохраняю данные с доктриной в базе данных 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');
}