Doctrine orm 使用条令保存日期字段

Doctrine orm 使用条令保存日期字段,doctrine-orm,symfony4,doctrine-dbal,Doctrine Orm,Symfony4,Doctrine Dbal,在我的应用程序中,我使用doctrine将数据保存到mysql数据库中。 对我来说,保存日期而不是时间就足够了,因此我选择了数据库字段的日期格式 在我的Symfony 4应用程序的实体中,如下所示: /** * @var DateTime * * @ORM\Column(name="create_date", type="date", nullable=false, options={"default" = "CURRENT_TIMESTAMP"}) * @Assert\NotBlank

在我的应用程序中,我使用doctrine将数据保存到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)
正如你所看到的,这是增加的时间。 这就是你用条令设置日期字段的方式吗

我必须将其更改为日期时间或时间戳字段吗

我应该删除实体中的默认值吗

他说:

“日期:
在没有时间和时区信息的情况下映射和转换日期数据。如果知道要存储的数据只需要是没有时间和时区信息的日期,则应该考虑使用这种类型。如果没有数据,则从数据库检索的值总是被转换为PHP的\DATETIME对象或NULL。

CURRENT\u TIMESTAMP
将日期和时间返回为
YYYY-MM-DD HH-MM-SS
。如果我理解正确,您只需要
YYYY-MM-DD
部件

为此,您必须删除
选项={“default”=“CURRENT_TIMESTAMP”}
并在实体的构造函数方法中执行此操作。每次执行
newentity()
操作时,都会调用此函数


为什么要用时间来格式化它?在日志中的Insert语句中,我仍然有时间:Insert INTO asset(名称、创建日期、beide、注释、金额、用户id、类别id)值(?、、?、?、?、?、?、?){“文件”:/var/www/sbudget/vendor/symfony/doctrine bridge/Logger/DbalLogger.php}{“1”:“Leckerlis”,“2”:“2019-01-19 06:05:30”,“3”:0,“4”:“5”:7.34,“6”:559,“7”:559}因此,是的,插入工作正常,但尝试插入错误的格式对我来说似乎不干净。Ups,很抱歉,我忘记从日期格式中删除
H:I:s
部分。我刚刚尝试了您的解决方案。虽然这个解决方案听起来合乎逻辑,但我在insert语句中仍然有Datetime。测试正在通过,因此从这个角度来看,没有问题,数据插入正确。奇怪的是,似乎没有办法用教义正确设置它。
public function __construct()
{
    $date = new \DateTime();
    $this->createDate = $date->format('Y-m-d');
}