CakePHP 在模型中调用 $this->create() 会破坏 $this->save() 的“创建”和“修改”自动字段

Posted

技术标签:

【中文标题】CakePHP 在模型中调用 $this->create() 会破坏 $this->save() 的“创建”和“修改”自动字段【英文标题】:CakePHP Calling $this->create() in model breaks the 'created' and 'modified' automatic fields for $this->save() 【发布时间】:2014-02-25 18:44:33 【问题描述】:

型号,缩写:

function doStuff 
    foreach(thing) 
        fields = makeFields()
        saveStuff(fields)
    


function saveStuff (fields = array()) 
    if (a record with field data does not yet exist) 
    $this->save(fields)

上面创建了一个新记录,并且对于每个foreach 迭代更新该记录,因为Cake 在内存中“加载”新记录,为不应该存在的$this->save() 提供id

解决方案是$this->create(),但这会阻止创建和修改的字段工作(数据库条目为零,0000-00-00 00:00:00)。有什么建议么?我想也许在保存后以另一种方式取消设置数据,但这也会破坏创建/修改的字段吗?

使用 Cakephp 2.4.4

【问题讨论】:

定义“不工作”。与此相关的创建/修改字段没有问题。这必须在您的应用程序代码中。发布“缩写”代码也无助于追踪问题。 原始方法:$this->id = null。如果存在id,Cake 将更新该行。否则,它将创建它。 @Eagle - 这不起作用 - 重载某些东西或其他东西'没有效果'。但是,它确实让我想到了空白字段,因此得到了答案。 【参考方案1】:

想通了。

$this->create() 加载一个“空白画布”,因此根据定义,它将包含记录中的所有字段及其默认值

在数据库中,我将createdmodified 字段的默认值设置为0000-00-00 00:00:00$this->create() 因此使用模型数据中的默认值填充这些字段。要使自动填充起作用,它们必须是空的。我将两者的默认值都设置为无,一切都很好。

【讨论】:

以上是关于CakePHP 在模型中调用 $this->create() 会破坏 $this->save() 的“创建”和“修改”自动字段的主要内容,如果未能解决你的问题,请参考以下文章

在Cakephp中导入/加载模型

在 CakePHP 中保存没有数据的模型(只需在 db 中创建 id)

CakePHP 3:保存关联模型失败

在cakephp中获取模型的sql查询

在CakePHP控制器中包含一个模型

用MySQL函数保存CakePHP模型数据