CakePHP:总是使用clear()而不是create()?

时间:2014-06-24 10:22:51

标签: php cakephp cakephp-2.5

在循环中调用clear()create()之间存在一个很小但非常重要的区别:

让我们假设以下代码:

foreach ($posts as $post) {
  $this->Post->create();
  $this->Post->id = $post['Post']['id'];
  $this->Post->save(['column3' => 'foo', 'column4' => 'bar']);
}

执行create()时: 第1列,可能默认为布尔值false,也会神奇地添加到更新的字段中,并且可能导致数据丢失(想想post1 with column1 = true)。

在执行clear()而不是create()时: 第1列(保存语句中未提及)根本没有被触及。

那么,在现有数据部分更新的foreach中依赖clear()是否总是安全的?

我的问题的第二方: 依靠clear() 总是更好吗? (查看clear()的代码时,您会发现它只是create(false)的便捷包装器。 create()create(false)的唯一区别是默认值的初始化。我认为,最好在数据库级别直接设置默认值。

顺便说一句:我刚刚提出small doc change。随意为此+1:

1 个答案:

答案 0 :(得分:6)

  

那么,在foreach中依赖clear()是否总是安全的,现有数据会被部分更新?

  

依赖clear()总是更好吗?

添加记录时使用create()的唯一好处是您的表单将预先填充默认值以显示给用户。因此,如果您不关心这一点,您可以随时使用clear()