我正在使用CakePHP 1.3,如果它是新的,我会在循环中插入新记录(几个〜几千个)或者如果它们已经存在则更新现有记录。但我保存的方式不会检查记录是否已经存在;相反,我在每个记录中分配一个主键值。我指定的这个ID保证是唯一的。如果此ID不存在,CakePHP似乎知道要插入并以其他方式更新。
然而,我不确定我是否正确行事。我看了here如果我在循环 中创建新记录 ,我需要执行$this->create()
,我在其他功能中实现我知道每条记录都是独一无二的。我不在这里,因为它似乎没有错误,我不需要检查每个记录的存在。
我正在插入或更新的每个记录数组都有一个键id
,表示相应表中的主键,每个数组包含两个正确关联的模型的数据。
e.g。
$this->saveAll($myData);
Array
(
[MyModel] => Array
(
[id] => 123
[xyz] => ...
...
)
[MySecondModel] => Array
(
[id] => 789
[my_model_id] => 123
[qwe] => ...
...
)
)
我做得好,或者我是否需要检查是否存在,然后是$this->create()
,如果有必要的话?
答案 0 :(得分:2)
如果启用SQL调试,如果在save()
之前指定ID,您将看到Cake从数据库中获取记录。如果记录存在,Cake将执行更新,否则执行插入;为ID指定NULL会强制插入。所以你正在做的事情很好。
如果您没有填写所有列,create()
很重要;否则数据将保留在对象中,最终会将数据从一个记录溢出到另一个记录。 create
只是重置内部数据结构。
除非你真的是偏执狂,否则你不需要在save()
之后检查你的数据是否存在。但是,执行检查save()
的结果;如果它返回false就会出错。