0

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

编号 | 姓名 | 创建时间

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

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

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

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

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

请给我提意见。

4

2 回答 2

2

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

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

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

但是cakephp中最好的方法是使用约定名称,不建议使用非常规名称

于 2012-07-30T06:38:45.083 回答
0

当您调用 时,Cake 会使用默认值$this->Model->create()填充其中包含的数据。$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(...);
于 2012-07-30T07:14:33.053 回答