首页 > 解决方案 > symfony 4 夹具日期时间方法不能使用 PDO 数据中的字符串总是设置为“现在”

问题描述

我尝试使用 Symfony Doctrine Fixtures 将一些数据从 WordPress 迁移到我的 Symfony 应用程序。

除了从 wordpress mysql 数据库列“post_date”迁移日期之外,一切正常。

例如,我的 mysql 变量如下所示: $post_value['post_date'] = '2018-03-30 21:05:24'; 并使用 PDO 拍摄。这个字符串是真实的,我只是在这里复制/粘贴它;)

然后我在 DataFixtures 中有这样的东西:

$item = new Articles();
$item->setDateCreated(new \DateTime($post_value['post_date']));
...
$this->manager->persist($item);
...
$this->manager->flush();

在数据库中,它不会放置迁移的值,而是类似于使用 \DateTime("now") 的当前日期时间

我从 mysql 得到的结果是(新的/另一个 database.table.column):

SELECT distinct(date_created) FROM articles;

'2019-12-12 22:37:01'
'2019-12-12 22:37:02'
'2019-12-12 22:37:03'
'2019-12-12 22:37:04'
'2019-12-12 22:37:05'
'2019-12-12 22:37:06'

编辑:

迁移所有数据和上面的示例涉及一个条目,这两个来自 sql 的不同结果

编辑2:

//hard print_r for fisrt row

echo "\n ---- \n >>>";
print_r($post_value['post_date']);
echo "<<< \n ---- \n ";
die();

//result with this
 ----
 >>>2010-05-25 23:05:20<<<
 ----

所以值不为空

标签: symfonydatetimepdofixtures

解决方案


我认为问题不在于这段代码,而更多来自实体。

两种可能性:

  1. 实体在保存时会覆盖日期时间值。
  2. 该列被配置为自动添加“NOW()”函数而不是变量的值。

然后,要确切知道发生了什么,您可以使用其中一些线索:

  1. 检查您的实体是否使用 Doctrine Lifecycle。如果是这样,请检查在 @Prepersist 方法期间未覆盖此日期时间值。
  2. 该列应仅由 : 注释@Column(type="datetime")
  3. 检查您的实体中是否没有使用任何 Doctrine Timestampable 捆绑包/特征。

推荐阅读