cakephp中mysql表创建时间字段的混淆

cakephp中mysql表创建时间字段的混淆,mysql,cakephp,datetime,timestamp,Mysql,Cakephp,Datetime,Timestamp,了解我无法自动更新表中创建时间字段的原因: id |名称|创建时间 创建时间--> 类型:时间戳, 默认值:当前时间戳 当我尝试使用如下语句在cakephp中保存数据时: $this->Model->create(); $this->Model->save(array('name'=>'...')); 我将新数据插入到表中,但没有创建时间。当我运行insert-intoMysql语句时,字段会自动更新为当前时间戳,这是不正常的 我知道我可以使用Cakephp文档中

了解我无法自动更新表中创建时间字段的原因:

id |名称|创建时间

创建时间--> 类型:时间戳, 默认值:当前时间戳

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

$this->Model->create();
$this->Model->save(array('name'=>'...'));
我将新数据插入到表中,但没有创建时间。当我运行insert-intoMysql语句时,字段会自动更新为当前时间戳,这是不正常的

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


请告诉我

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

$this->Model->set('creation_time', CURRENT_TIMESTAMP); 
其中,当前_时间戳是您必须创建的变量,在保存模型之后


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

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

debug($this->Model->data);
您将看到
创建时间已设置,但带有字符串:

array(
    'Model' => array(
         ...,
         'creation_time' => 'CURRENT_TIMESTAMP'
)
INSERT INTO `models` (..., `creation_time`, ...) VALUES (..., 'CURRENT_TIMESTAMP', ...)
)

因此,当Cake生成INSERT查询时,该查询包含
creation\u time
字段,其中
CURRENT\u TIMESTAMP
作为字符串:

array(
    'Model' => array(
         ...,
         'creation_time' => 'CURRENT_TIMESTAMP'
)
INSERT INTO `models` (..., `creation_time`, ...) VALUES (..., 'CURRENT_TIMESTAMP', ...)
如果要在数据表中保留
创建时间
字段,要生成工作查询,可以在保存数据之前删除默认值:

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

谢谢我在模型文件中编写了一个覆盖函数save(),效果非常好。