Symfony Doctrine类型datetime预期格式为y-m-d h:i:s。

7

当我试图用doctrine从数据库中选择一些项目时,出现了symfony的问题。

我运行了以下代码:

$allOrders = $em->getRepository('MyBundle:Dieta')->findBy(array('diet_status'=>'active'));
var_dump($allOrders);

我遇到了以下错误:

将数据库值“2014-03-03”转换为Doctrine类型datetime失败。期望的格式为:Y-m-d H:i:s

当我向数据库中插入日期时,我是这样做的:

$format = 'd/m/Y';
$date = \DateTime::createFromFormat($format, $_POST['dietStartDate']);
$dietStartDate = $date->format('Y-m-d H:i:s');
$dietStartDate = new \Datetime($dietStartDate);

$timestamp = strtotime(str_replace('/', '-', $_POST['dietStartDate']));
$timestamp7 = strtotime('+7 days', $timestamp);
$datetime = date("Y-m-d H:i:s", $timestamp7);
$dietDateEnd = new \Datetime($datetime);

$dietStartDate$dietDateEnd被插入到数据库的日期时间列中。在doctrine.yml文件中,我也将其声明为日期时间。

有任何想法吗?

2个回答

8
从值 "2014-03-03" 可以看出,您的数据库列类型是 date 而不是 datetime
运行 php app/console doctrine:schema:update 来检查是否有更改。

你说得非常对!我已经收到了构建好的数据库,但没有注意到。谢谢你,我的朋友,你为我节省了宝贵的时间。 - irimie andrei

0
我有同样的问题,我通过添加下面的代码解决了它。 问题是由于Postgres在微秒时注册了不为0的值,这导致了问题。
use Doctrine\DBAL\Types\Type;

Type::overrideType('datetime', 'Doctrine\DBAL\Types\VarDateTimeType');
Type::overrideType('datetimetz', 'Doctrine\DBAL\Types\VarDateTimeType');
Type::overrideType('time', 'Doctrine\DBAL\Types\VarDateTimeType');

Type::overrideType('datetime_immutable', 'Doctrine\DBAL\Types\VarDateTimeImmutableType');
Type::overrideType('datetimetz_immutable', 'Doctrine\DBAL\Types\VarDateTimeImmutableType');
Type::overrideType('time_immutable', 'Doctrine\DBAL\Types\VarDateTimeImmutableType');

你可以在这里阅读更多信息 https://www.doctrine-project.org/projects/doctrine-dbal/en/2.10/reference/known-vendor-issues.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接