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()
加载一个“空白画布”,因此根据定义,它将包含记录中的所有字段及其默认值。
在数据库中,我将created
和modified
字段的默认值设置为0000-00-00 00:00:00
。 $this->create()
因此使用模型数据中的默认值填充这些字段。要使自动填充起作用,它们必须是空的。我将两者的默认值都设置为无,一切都很好。
【讨论】:
以上是关于CakePHP 在模型中调用 $this->create() 会破坏 $this->save() 的“创建”和“修改”自动字段的主要内容,如果未能解决你的问题,请参考以下文章