Symfony升级后DateTimeImmutable转DateTimeType报错求助
解决DateTimeImmutable转DateTimeType的类型错误
问题根因
Doctrine DBAL 4.0+版本对字段类型的校验变得更严格:
- 实体字段标注
datetime类型时,Doctrine默认仅接受\DateTime对象 - 代码中传入的
\DateTimeImmutable不再被自动转换,因此触发类型不匹配错误
解决方案
方案1:修改实体字段类型为datetime_immutable
直接将实体的字段类型改为datetime_immutable,匹配传入的DateTimeImmutable类型:
#[ORM\Column(type: 'datetime_immutable')] private $AccountStatement_CreatedOn;
该字段的getter/setter无需修改,因为DateTimeImmutable实现了DateTimeInterface接口,符合方法参数要求。
方案2:将DateTimeImmutable转换为DateTime对象
如果不想修改实体字段类型,可在调用setter时将DateTimeImmutable转换为DateTime:
// 方法1:直接使用DateTime $accountstatement->setAccountStatementCreatedOn(new \DateTime()); // 方法2:转换已有DateTimeImmutable对象 $immutableDate = new \DateTimeImmutable(); $accountstatement->setAccountStatementCreatedOn(\DateTime::createFromImmutable($immutableDate));
方案3:全局配置Doctrine使用Immutable类型
若希望项目中所有datetime字段都默认支持DateTimeImmutable,可在Doctrine配置文件中修改类型映射:
# config/packages/doctrine.yaml doctrine: dbal: types: datetime: Doctrine\DBAL\Types\DateTimeImmutableType
内容的提问来源于stack exchange,提问作者sridhar pandurangiah
相关产品推荐
相关产品推荐

