在我的应用程序中,我将数据保存到MySQL数据库中。对我来说,保存日期是完全足够的,而不是时间,因此我选择了数据库字段的日期格式。
在我的Symfony 4应用程序的实体中,这看起来像:
/**
* @var DateTime
*
* @ORMColumn(name="create_date", type="date", nullable=false, options={"default" = "CURRENT_TIMESTAMP"})
* @AssertNotBlank
*/
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,如果没有数据。"
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');
}