CakePHP1.3:插入或更新记录的正确方法

CakePHP1.3:插入或更新记录的正确方法,cakephp,cakephp-1.3,Cakephp,Cakephp 1.3,我使用的是CakePHP1.3,如果是新的,我会在循环中插入新记录(几千条),如果已经存在,我会更新现有记录。但是我保存的方式并没有检查记录是否已经存在;相反,我在每个记录中分配一个主键值。我分配的这个ID保证是唯一的。如果这个ID不存在,CakePHP似乎知道如何插入,否则将进行更新 然而,我不确定我是否用正确的方法来做。我读到,如果我在循环中创建一个新记录,我需要执行$this->create(),我会在其他函数中实现它,我知道每个记录都是唯一的。我在这里不这样做,因为它似乎没有错误,我不需

我使用的是CakePHP1.3,如果是新的,我会在循环中插入新记录(几千条),如果已经存在,我会更新现有记录。但是我保存的方式并没有检查记录是否已经存在;相反,我在每个记录中分配一个主键值。我分配的这个ID保证是唯一的。如果这个ID不存在,CakePHP似乎知道如何插入,否则将进行更新

然而,我不确定我是否用正确的方法来做。我读到,如果我在循环中创建一个新记录,我需要执行
$this->create()
,我会在其他函数中实现它,我知道每个记录都是唯一的。我在这里不这样做,因为它似乎没有错误,我不需要检查每个记录的存在

我要插入或更新的每个记录数组都有一个键
id
,该键指示各个表中的主键,并且每个数组包含两个模型的数据,这两个模型是正确关联的

e、 g


我做得好吗,或者我需要检查是否存在,然后再检查
$this->create()
,如果需要的话?

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

如果没有填写所有列,则
create()
非常重要;否则,数据将保留在对象中,最终将数据从一条记录溢出到另一条记录<代码>创建只需重置内部数据结构

save()
之后,您不需要检查数据是否存在,除非您真的有妄想症。但是,
save()
检查结果;如果返回false,则会出现错误。

您能否详细说明“溢出数据”部分?我的数据数组不一定定义了所有列。举个例子吧?我所说的“溢出数据”是指:假设您用“bar”列的值“foo”更新一条记录。在下一个循环中,创建一个新记录,但不调用create()或设置“bar”;在这种情况下,您的新记录在本栏中也会有“foo”。你可能不想要的东西。这就是为什么建议每次调用create()。
$this->saveAll($myData);

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