【问题标题】:CakePHP Calling $this->create() in model breaks the 'created' and 'modified' automatic fields for $this->save()CakePHP 在模型中调用 $this->create() 会破坏 $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 - 这不起作用 - 重载某些东西或其他东西'没有效果'。但是,它确实让我想到了空白字段,因此得到了答案。

标签: cakephp save record


【解决方案1】:

想通了。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多