Doctrine orm 使用条令保存日期字段
在我的应用程序中,我使用doctrine将数据保存到mysql数据库中。 对我来说,保存日期而不是时间就足够了,因此我选择了数据库字段的日期格式 在我的Symfony 4应用程序的实体中,如下所示: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
/**
* @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');
}