【问题标题】:Submitting current timestamp in CakePHP在 CakePHP 中提交当前时间戳
【发布时间】:2011-04-18 21:36:10
【问题描述】:

直接在INSERTUPDATE 上提交当前时间戳的方法是什么?如果我正在运行常规 SQL,我会在提交时使用函数 NOW() 来处理特定的 SQL 字段。我将如何使用 CakePHP 做到这一点?

$this->Model->save($this->data)

【问题讨论】:

    标签: php cakephp cakephp-1.3


    【解决方案1】:

    您可以将时间戳字段设置为自动初始化和自动更新

    timestampfield TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    

    http://dev.mysql.com/doc/refman/5.0/en/timestamp.html

    【讨论】:

      【解决方案2】:

      在 CakePHP 中,您可以通过使用 DboSource::expression 来包含未转义的 NOW() 函数

      $this->data['SomeModel']['your_datetime_field'] = DboSource::expression('NOW()');
      $this->Model->save($this->data);
      

      这是在保存中包含 MySQL 函数的首选方式。

      http://api.cakephp.org/2.3/class-DboSource.html#_expression

      【讨论】:

      • 所以我必须在保存之前处理发布的数据。
      • 是的。但它只是向数组中添加了一个元素。此外,如果您的表中有名为 createdupdated 的字段,cakephp 将分别在 INSERTUPDATE 语句上自动更新它们。不过,我更喜欢手动添加元素。
      • 哎呀,让createdmodified
      • 不要默默地投票。如果有理由在这么老的答案上这样做,请给出。也不要对撰写本文时正确的答案投反对票。相反,请评论它应该更新并包含该信息(或如果您拥有特权直接编辑)。
      • 如果遇到 E_STRICT 错误,请尝试调用 $this->Model->getDataSource()->expression('NOW()')
      【解决方案3】:

      如果您在表中添加创建和修改的列,它们将自动填充当前时间戳。如果情况不同 - 即您要填充稍后要修改的字段,则最好使用 edorian 的解决方案。

      【讨论】:

      • 这是蛋糕的方式,应该是首选答案+1。如果 OP 要求提供可修改的字段,她应该更具体。
      猜你喜欢
      • 1970-01-01
      • 2012-04-26
      • 1970-01-01
      • 1970-01-01
      • 2010-09-11
      • 1970-01-01
      • 1970-01-01
      • 2021-12-04
      • 2014-09-13
      相关资源
      最近更新 更多