【问题标题】:Confusion of creation_time field of mysql table in cakephpcakephp中mysql表的creation_time字段混淆
【发布时间】:2012-07-30 06:32:44
【问题描述】:

知道为什么我不能自动更新表中的 creation_time 字段:

标识 |姓名 |创建时间

创作时间--> 类型:时间戳, 默认值:CURRENT_TIMESTAMP

当我尝试使用如下语句将数据保存在 cakephp 中时:

$this->Model->create();
$this->Model->save(array('name'=>'...'));

我将新数据插入到表中,但没有创建时间。当我运行 insert into Mysql 语句时,该字段会自动更新为当前时间戳,这是异常的。

我知道我可以使用 Cakephp 文档中的 created 字段,但就我而言,我不想更改现有字段名称,因为它是在同一项目中工作的其他成员使用的表。

请给我建议。

【问题讨论】:

    标签: mysql cakephp datetime timestamp


    【解决方案1】:

    在 cakephp 中,最好在您的情况下使用“created”等常规名称。 该字段将是日期时间类型。但是,如果您想创建自己的字段,则必须使用常规设置示例将实际日期和时间手动插入到字段中:

    $this->Model->set('creation_time', CURRENT_TIMESTAMP); 
    

    current_timestamp 是您在保存模型后必须创建的变量

    但是cakephp中最好的方式是使用约定名,不推荐使用不约定名

    【讨论】:

      【解决方案2】:

      当您调用$this->Model->create() 时,Cake 会使用默认值填充$this->Model 中包含的数据。如果调试$this->Model->data

      debug($this->Model->data);
      

      你会发现 creation_time 已经设置好了,但是带有一个字符串:

      array(
          'Model' => array(
               ...,
               'creation_time' => 'CURRENT_TIMESTAMP'
      )
      

      )

      所以当 Cake 生成 INSERT 查询时,这个查询包含 creation_time 字段,CURRENT_TIMESTAMP 作为字符串:

      INSERT INTO `models` (..., `creation_time`, ...) VALUES (..., 'CURRENT_TIMESTAMP', ...)
      

      如果您想将 creation_time 字段保留在数据表中,要生成有效查询,您可以在保存数据之前删除默认值:

      $this->Model->create();
      unset($this->Model->data['Model']['creation_time']);
      $this->Model->save(...);
      

      【讨论】:

      • 谢谢。我在模型文件中写了一个覆盖函数save(),效果很好。
      猜你喜欢
      • 2017-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-21
      • 2012-05-22
      • 1970-01-01
      • 2012-10-15
      • 1970-01-01
      相关资源
      最近更新 更多