2

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

我的理解是,在 an 上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;
...

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

4

1 回答 1

3

这是按设计完成的,如果我们打开文件“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”中存储的日期之间进行检查。

于 2016-09-22T12:37:02.583 回答