我使用 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"
}
而不是空
我前段时间遇到了同样的问题。正如@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|无效日期。
有关详细信息,请参阅:如何处理 Doctrine2 SELECT 查询中日期时间类型的默认值?
某些客户端对 0000-00-00 00:00:00 值显示 null。因此,请通过命令行客户端进行检查以确保(CLI 显示正确的值(。然后只需更新为 null,其中值为 0000-00-00 00:00:00