我怎样才能让 Gedmo\Timestampable 在第一次创建时保持 updated_at 为空?

How can I get Gedmo\Timestampable to keep updated_at null on first create?

我有一个 Symfony 2.8 应用程序,它使用 Gedmo\Timestampable 注释进行自动 created_atupdated_at 操作,但它似乎将相同的时间戳放入 updated_at 列,当 entity/row 首次创建时。 UPDATE 确实会导致 updated_at 列显示较新的时间戳,但我希望它是空白的。

我的理解是,在 INSERT 上,只有 created_at 列应该填充时间戳,而 updated_at 应该留空,因为它还没有更新为这样的。只有在列的第一次更新后,它才能获得更新时间的值。

我的预期是否正确?我的 code/config 有问题吗?或者这个注释实际上是通过设计为两列设置值的吗?

我的config.yml:

...
stof_doctrine_extensions:
    default_locale: "%locale%"
    translation_fallback: true
    orm:
        default:
            translatable: true
            timestampable: true
...

我的实体:

...
/**
 * An automatic timestamp of the creation.
 *
 * @var \DateTime $createdAt
 * @Gedmo\Timestampable(on="create")
 * @ORM\Column(name="created_at", type="datetime")
 */
public $createdAt;

/**
 * An automatic timestamp of the updation. 
 *
 * @var \DateTime $updatedAt
 * @Gedmo\Timestampable(on="update")
 * @ORM\Column(name="updated_at", type="datetime")
 */
protected $updatedAt;
...

table 将两列定义为 DATETIME 并且它们没有默认子句。

这是设计使然,如果我们打开文件 "vendor/gedmo/doctrine-extensions/lib/Gedmo/Timestampable/Timestampable.php",第 22 行(在我的 Gedmo 版本上):

/**                                                                                                                                                                                                                                                                           
 * @gedmo:Timestampable(on="update")                                                                                                                                                                                                                                          
 * dates which should be updated on update and insert                                                                                                                                                                                                                         
 */ 

毕竟,INSERT 也有点像 table / 记录的更新。如果您需要知道该对象是否是新创建的,您仍然可以在 "createdAt" 中存储的日期和 "updatedAt" 中存储的日期之间进行检查。