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