CakePHP 1.3:插入或更新记录的正确方法

时间:2013-07-19 16:15:43

标签: cakephp cakephp-1.3

我正在使用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(),如果有必要的话?

1 个答案:

答案 0 :(得分:2)

如果启用SQL调试,如果在save()之前指定ID,您将看到Cake从数据库中获取记录。如果记录存在,Cake将执行更新,否则执行插入;为ID指定NULL会强制插入。所以你正在做的事情很好。

如果您没有填写所有列,create()很重要;否则数据将保留在对象中,最终会将数据从一个记录溢出到另一个记录。 create只是重置内部数据结构。

除非你真的是偏执狂,否则你不需要在save()之后检查你的数据是否存在。但是,执行检查save()的结果;如果它返回false就会出错。