在循环中调用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)
的唯一区别是默认值的初始化。我认为,最好在数据库级别直接设置默认值。
答案 0 :(得分:6)
那么,在foreach中依赖clear()是否总是安全的,现有数据会被部分更新?
是
依赖clear()总是更好吗?
在添加记录时使用create()
的唯一好处是您的表单将预先填充默认值以显示给用户。因此,如果您不关心这一点,您可以随时使用clear()
。