1

在我的应用程序中,我将带有学说的数据保存到 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 说如下:

"date:映射和转换没有时间和时区信息的日期数据。如果你知道要存储的数据总是只需要一个没有时间和时区信息的日期,你应该考虑使用这种类型。从数据库中检索的值总是如果没有数据,则转换为 PHP 的 \DateTime 对象或 null。"

4

1 回答 1

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');
}
于 2019-05-02T09:12:33.737 回答