Doctrine ORM:NULL到DateTime转换错误

问题描述 投票:1回答:2

我使用PHP7,Symfony 2.8和Doctrine ORM 2.5。我有一个带有日期时间字段的实体:

 /** @ORM\Column(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

php symfony doctrine-orm doctrine
2个回答
1
投票

我前段时间遇到过同样的问题。正如@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?


0
投票

有些客户在00:00:00值显示null。因此,请通过命令行客户端检查以确保(CLI显示正确的值)。然后只需更新为null,其值为0000-00-00 00:00:00

© www.soinside.com 2019 - 2024. All rights reserved.