关于php:Doctrine ORM:NULL到DateTime转换错误

Doctrine ORM: NULL to DateTime conversion error

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 /** @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;
}

如果dataordine列为空,当我尝试获取MySQL数据库中持久化实体的$dataordine字段($ordine->getdataordine())时,我得到:

1
2
3
4
5
6
7
8
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')返回了错误的日期。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$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在这些列中不允许空的无效日期,而不是发布和接受作为答案的内容。

有关详细信息,请访问:如何在doctrine2 select查询中处理日期时间类型的默认值?


一些客户机显示0000-00-00 00:00:00值为空。因此,通过命令行客户机进行检查以确保(cli显示正确的值)。然后更新为空,值为0000-00-00 00:00:00