【问题标题】:How to specify defaultValue to "now" for a timestamp column in Propel?如何为 Propel 中的时间戳列指定 defaultValue 为“now”?
【发布时间】:2012-02-28 06:41:28
【问题描述】:

这是我对 Propel 模式的表定义。列modified 具有timestamp 类型(PHP 中为DateTime),我想为now 分配一个默认值。我尝试将其设置为“现在”,但使用 propel-gen insert-sql 命令时出现错误:

"语法错误或访问冲突:1067 的默认值无效 '修改'。

任何人都知道如何为 Propel 中的时间戳列设置默认值?

<table name="mashup_setting">
   <!-- omitted previous column definition -->
   <column name="modified" type="timestamp" required="true" defaultValue="now" />
</table>

【问题讨论】:

    标签: php datetime timestamp propel


    【解决方案1】:

    在较新的 Propel 版本中,您可以像这样指定您的列:

    <column name="created" type="TIMESTAMP" defaultExpr="CURRENT_TIMESTAMP" />
    

    这样就可以跨数据库兼容了。

    【讨论】:

    • 这应该是公认的答案,因为它更准确!
    • 同意,这更准确,应该是公认的答案
    【解决方案2】:

    将名称更改为“updated_at”,这是 Propel 中的一个特殊字段,每当您更新该字段时,它都会自动更新为 NOW()。 “created_at”也是类似的,当你的对象被创建时会做同样的事情。

    在您的模型中,您始终可以将“modified”或 getModified() 代理到 getUpdatedAt() 以完成您的功能。

    如果您必须将“修改”作为列的名称,您需要编写一个行为,我认为您需要做更多的工作来完成此操作。您可以在此处找到有关行为的信息。

    http://www.symfony-project.org/cookbook/1_2/en/behaviors

    【讨论】:

      【解决方案3】:

      http://propelorm.org/behaviors/timestampable.html 的文档没有说明这在 1.6 中是否可用,而是将其添加到架构并构建:

      <behavior name="timestampable" />
      

      模型现在有两个新列,created_at 和 updated_at,它们存储在保存时自动更新的时间戳:

      $obj->save();
      echo $obj->getCreatedAt(); // 2009-10-02 18:14:23
      echo $obj->getUpdatedAt(); // 2009-10-02 18:14:25
      

      【讨论】:

        猜你喜欢
        • 2016-04-07
        • 2016-12-19
        • 2017-05-27
        • 2016-06-27
        • 2012-11-30
        • 2010-12-31
        • 2016-10-02
        • 1970-01-01
        • 2021-08-17
        相关资源
        最近更新 更多