3

我正在使用 CakePHP 1.3,如果它是新记录,我将在循环中插入新记录(几~几千条),或者如果它们已经存在,则更新现有记录。但是我保存的方式并没有检查记录是否已经存在;相反,我在每条记录中分配了一个主键值。我分配的这个 ID 保证是唯一的。如果此 ID 不存在,CakePHP 似乎知道插入,否则更新。

但是,我不确定我是否以正确的方式进行操作。如果我在循环中创建一条新记录,我会在这里阅读,我需要这样做,我确实在其他函数中实现了这一点,我知道每条记录都是唯一的。我不在这里这样做,因为它似乎可以正常工作,并且我不需要检查每个记录的存在。$this->create()

我插入或更新的每个记录数组都具有id指示相应表中主键的键,并且每个数组都包含正确关联的两个模型的数据。

例如

$this->saveAll($myData);

Array
(
    [MyModel] => Array
    (
        [id] => 123
        [xyz] => ...
        ...
    )
    [MySecondModel] => Array
    (
        [id] => 789
        [my_model_id] => 123
        [qwe] => ...
        ...
    )
)

我正在做的事情是好的,还是我需要检查是否存在$this->create(),如果有必要的话?

4

1 回答 1

3

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

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

之后你不需要检查你的数据是否存在save(),除非你真的很偏执。但是,检查结果save();如果它返回 false 出了问题。

于 2013-07-19T19:34:34.393 回答