原则 ORM:空到日期时间转换错误



我使用 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

相关内容

  • 没有找到相关文章

最新更新