【问题标题】:cakePHP timestamp field is not saved properlycakePHP 时间戳字段未正确保存
【发布时间】:2011-07-20 21:29:40
【问题描述】:

我有一个带有时间戳字段的记录,它的默认值在 mySql 数据库中定义为 current_timestamp。 我使用代码:

$this->Ad->Click->create();
$this->Ad->Click->set('ad_id',  $id);
$this->Ad->Click->save($this->data);

记录保存后,时间戳字段保持为 0000-00-00 00:00:00。 这是为什么呢?

当然,我知道我可以在查询中使用 php 时间函数或 mySQL 函数来设置字段值。但我更喜欢“标准方式”。

【问题讨论】:

  • 你看过生成的SQL语句了吗?
  • 不,我该怎么做?
  • 将调试设置为 2(在 app/config/core.php 中),并将 $this->element('sql_dump') 添加到您的视图/布局中(如果您使用的是 cake 1.3)。
  • 很好,会尝试报告。谢谢!
  • 问题已在此处得到解答stackoverflow.com/questions/3823169/…

标签: mysql cakephp timestamp default-value


【解决方案1】:

如果您将字段名称设置为“created”,Cake 将在创建记录时自动使用当前日期时间。

http://book.cakephp.org/view/1015/created-and-modified

【讨论】:

  • 首先:谢谢,但是,我知道这个选项并使用它。但我真的很想了解为什么我的方法行不通。
【解决方案2】:

进一步研究该问题后,CakePHP 处理 CURRENT_TIMESTAMP 关键字的方式存在问题

“但是 CakePHP 不理解 CURRENT_TIMESTAMP 关键字,因此将其视为字符串并用引号括起来。” - http://techlog.p2061.org/2009/04/17/cakephp-and-current_timestamp/

要在数据库中启用默认行为,您可以将要在数据库中设置的字段列入黑名单,这样 CakePHP 就不会处理它:http://nuts-and-bolts-of-cakephp.com/2009/03/11/blacklist-your-model-fields-for-save/

虽然黑名单有效,但我决定采用在保存前设置字段值的方法。在这种情况下,确保app server和db server的时间同步很重要!

$this->data['Ad']['time'] = date('c');

我知道你说过这不是你想要的,但在我看来这似乎更容易解决。

【讨论】:

    猜你喜欢
    • 2015-10-01
    • 2012-01-29
    • 1970-01-01
    • 2017-05-28
    • 2020-12-12
    • 2015-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多