Поле даты сохранения с доктриной - PullRequest
0 голосов
/ 01 мая 2019

В моем приложении я сохраняю данные с доктриной в базе данных 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 / проекты / Доктрина-DBAL / ы / 2,6 / ссылка / types.html дата # говорит следующее:

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

1 Ответ

0 голосов
/ 02 мая 2019

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');
}
...