如何让Gedmo \ Timestampable在首次创建时保持updated_at为null?

时间:2016-09-22 12:20:08

标签: php symfony doctrine doctrine-extensions sql-timestamp

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

我的理解是,在updated_at上,只应使用时间戳填充INSERT列,并且created_at应保持空白,因为它尚未更新。只有在第一次更新列后才能获得更新时间的值。

我是否正确期待这一点?我的代码/配置有问题吗?或者这个注释是否实际上按设计设置了两列的值?

我的updated_at

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; ... ,它们没有默认子句。

1 个答案:

答案 0 :(得分:2)

这是通过设计完成的,因为我们可以看到我们是否打开文件" 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有点像表/记录的更新。如果您需要知道对象是否是新创建的,您仍然可以检查存储在" createdAt"以及存储在" updatedAt"。

中的那个