保存日期字段和原则

时间:2019-05-01 16:24:32

标签: doctrine-orm symfony4 doctrine-dbal

在我的应用程序中,我将带有学说的数据保存到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对象,如果不存在数据,则为null。“

1 个答案:

答案 0 :(得分:0)

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