0

我有一个使用 cakephp 中的 saveall 保存到数据库中的数组。最近我注意到该数组有大约 100 个值集,并且运行了 100 个插入查询来保存它。这是作为一个事务完成的,然后再提交它。每个查询大约需要 1 毫秒。所以 100 个查询加起来会花费很多时间。我确信有一些方法可以在一个查询中执行此操作。

我试过了

$this->User->savemany($data)

但没有变化。

有没有其他方法可以让我保存这样的东西

INSERT INTO users (ID, Value)

值(1,“第一”),(2,“第二”),(3,“第三”);

谢谢你

4

1 回答 1

1

不,如果不使用自定义 SQL 或扩展 AppModel 以使其具有INSERT在某些情况下运行优化语句的方法,就无法实现此目的。**

请记住,您不会总是单独保存模型的数据。有时您正在保存相关对象。

例如:Person hasMany Car。当您保存多个Persons 时,每个都具有任意数量的Car(s),CakePHP 需要取回每个保存的 Person 记录的 ID,然后才能关联数据库中的 Car 记录。

就像我说的那样,您可以扩展 AppModel 并增加 saveAll 方法以检查正在保存的数据的结构,并将其连接到您编写的自定义方法中以执行您想要的操作,但它可能会添加更多saveAll 方法的开销超过了它的价值。

** 您可以在没有大量自定义编码的情况下进行的最佳优化是用事务包装 saveAll,这样您就不必为每个事务初始化和提交。例子:

$this->Model->begin();
$this->Model->saveAll(data);
$this->Model->commit();
于 2012-12-05T18:10:34.587 回答