doctrine 2.0:使用SQL时间戳

Bet*_*ide 7 mysql timestamp doctrine-orm

我正在寻找一种使用TIMESTAMP而不是DATETIMEMySql 来制作学说的方法.

另外我需要设置ON UPDATE CURRENT_TIMESTAMPCURRENT_TIMESTAMP默认值.

我希望有可能在PHP注释中包含所有这些代码,将所有内容放在一个中心位置.

我怎样才能做到这一点?

Dav*_*san 19

经过几个小时的搜索,我找到了答案,我希望这可以帮助其他人寻找比实体生命周期和WRONG列类型更令人满意的解决方案(因为a TIMESTAMP是一种特定类型,除了存储datetime值之外还有特定的行为)

您需要做的就是添加

 * @ORM\Column(type="datetime", nullable=false)
 * @ORM\Version
Run Code Online (Sandbox Code Playgroud)

对您的注释和Doctrine都将创建一个TIMESTAMP列,DEFAULT CURRENT_TIMESTAMP然后将实际的表值作为有效\DateTime对象返回.

CTOP(原件海报)

  • 为此,您必须询问编写它的人。 (2认同)
  • “version”属性是一个标志,告诉 Doctrine 它可以更改此列中的值,以跟踪并发写入在长时间运行的事务结束之前可能影响行数据的位置。请参阅[乐观锁定](http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/transactions-and-concurrency.html#optimistic-locking)。为了让 Doctrine 在您的列中使用“timestamp”,采用此属性可能不是一个好主意。 (2认同)

Pol*_*ism 4

不存在像TIMESTAMP在 mysql 中使用 Doctrine 这样的东西。但是,我自己修复了它,但必须测试它:

  • 创建一个文件:Doctrine\DBAL\Types\TimestampType.php
  • 将代码复制TimeType.phpTimestampType.php
  • 在代码中将“时间”重命名为“时间戳”
  • 创建一个新常量,并将时间戳添加到类型映射中:Doctrine\DBAL\Types\Type.php
  • 创建调用的getTimestampTypeDeclarationSQL函数Doctrine\DBAL\Platforms\AbstractPlatform.php
  • 在该函数中,返回TIMESTAMP

我曾经yaml创建过实体和代理,因此使用yaml

type: timestamp
Run Code Online (Sandbox Code Playgroud)

我现在要测试这个“修复”/“解决方法”。我会告诉你。