4

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

让我们假设以下代码:

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

执行create(): column 1 时,可能默认为 boolean false,它也神奇地添加到更新字段中,并可能导致数据丢失(想想 column1 = true 的帖子)。

当做一个clear()而不是create():第1列时,保存语句中没有提到它根本没有被触及。

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

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

顺便说一句:我刚刚提出了一个小的文档更改。随意+1这个:

4

1 回答 1

7

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

是的。

依赖 clear() 总是更好吗?

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

于 2014-06-24T13:04:39.227 回答