Doctrine ORM:NULL到DateTime转换错误
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Doctrine ORM:NULL到DateTime转换错误相关的知识,希望对你有一定的参考价值。
我使用php7,Symfony 2.8和Doctrine ORM 2.5。我有一个带有日期时间字段的实体:
/** @ORMColumn(name="data_ordine", type="datetime", nullable=true) */
private $dataOrdine;
/**
* @param mixed $dataOrdine
*/
public function setDataOrdine($dataOrdine = null)
{
$this->dataOrdine = $dataOrdine;
}
/**
* @return mixed
*/
public function getDataOrdine()
{
return $this->dataOrdine;
}
当我尝试在mysql数据库上获取持久化实体的$ dataOrdine字段($ ordine-> getDataOrdine())时,如果dataOrdine列为NULL,我得到:
object(DateTime)#551 (3) {
["date"]=>
string(27) "-0001-11-30 00:00:00.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(13) "Europe/Berlin"
}
而不是NULL
我前段时间遇到过同样的问题。正如@goto所说,你的专栏不是NULL
,因为new DateTime(NULL)
是一个有效的陈述。
由于这正是发生在我身上的事情,我完全相信有问题的行的价值将以0000-00-00 00:00:00
的形式出现,这使得new DateTime('0000-00-00 00:00:00')
返回错误的日期。
$null_date = new DateTime(null);
$wrong_date = new DateTime('0000-00-00 00:00:00');
var_dump($null_date);
var_dump($wrong_date);
object(DateTime)#1 (3) {
["date"]=>
string(26) "2018-01-17 13:22:01.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(10) "US/Pacific"
}
object(DateTime)#2 (3) {
["date"]=>
string(27) "-0001-11-30 00:00:00.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(10) "US/Pacific"
}
我有一个我根本不喜欢的解决方法,而不是发布和接受的答案,我让DBA不允许NULL |这些列的无效日期。
更多信息:How to handle default values for a DateTime type in Doctrine2 SELECT query?
有些客户在00:00:00值显示null。因此,请通过命令行客户端检查以确保(CLI显示正确的值)。然后只需更新为null,其值为0000-00-00 00:00:00
以上是关于Doctrine ORM:NULL到DateTime转换错误的主要内容,如果未能解决你的问题,请参考以下文章
Zend2 框架 - 给映射异常的 Doctrine ORM
Symfony2:传递给 Doctrine\ORM\EntityRepository::__construct() 的参数 2 必须是 Doctrine\ORM\Mapping\ClassMetada