首页 > 解决方案 > 持久化数据后刷新时出现致命错误

问题描述

我想将新实体中的数据持久化到数据库中,这是最基本的操作之一吗?但是当我 flush 时,我收到以下致命错误:

FatalErrorException in DateTimeType.php line 53: 
Error: Call to a member function format() on string

所以这就是我想在 Symfony 3.2、PHP 5.6(叹息)和 mariadb 10.3 上保存我的数据的方式:

$myEntity = new myEntity();
$myEntity->setFoo('a');
$myEntity->setBar('b');
$myEntity->setDateCreation(new \DateTime());

$this->em->persist($myEntity);
$this->em->flush();

我的实体:

class myEntity
{
    // ...

    /**
     * @var string
     * 
     * @ORM\Column(name="sFoo", type="string",  length=255, nullable=false, unique=true)
     */
    private $foo;

    /**
     * @var string
     * 
     * @ORM\Column(name="sBar", type="string",  length=255, nullable=false)
     */
    private $bar;

    /**
     * @var \DateTime
     * 
     * @ORM\Column(name="dDateCreation", type="date")
     */
    private $dateCreation;

    // Getter and setters are classics, here's the one for the date

    public function setDateCreation($dateCreation)
    {
        $this->dateCreation = $dateCreation;
    }

}

如果我在刷新之前停止脚本,我绝对不会出错。当我之前转储我的实体时,所有属性都设置正确

MyEntity {#2301 ▼
  -id: null
  -foo: "a"
  -bar "b
  -dateCreation: DateTime {#2204 ▼
    +"date": "2020-07-06 12:32:17.000000"
    +"timezone_type": 3
    +"timezone": "Europe/Paris"
  }
}

从数据库方面:列似乎设置正确:sFoo 和 sBar 是VARCHAR(255)dDateCreation 是date

我最终将日期字段类型从日期更改为字符串,并使用字符串作为参数,例如“20200706”,只是为了尝试。而且......我得到了同样的错误,即使没有 DateTime 参与其中。

要么我完全失明,并且我在发布的代码中忘记了明显的事情,要么原因来自其他地方。

我对另一个实体尝试了相同的操作,结果相同。

标签: doctrine-ormdoctrinemariadb

解决方案


推荐阅读