cakephp saveall正在保存多个查询

时间:2012-12-05 17:14:31

标签: cakephp cakephp-2.0

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

我试过

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

但没有变化。

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

INSERT INTO users (ID, Value)

VALUES(1,'First'),(2,'Second'),(3,'Third');

谢谢

1 个答案:

答案 0 :(得分:1)

不,没有办法在不进入自定义SQL或扩展AppModel的情况下完成此任务,以便它在某些情况下有一个方法来运行优化的INSERT语句。 **

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

例如:Person hasMany Car。当您保存多个Person,每个Car具有任意数量的$this->Model->begin(); $this->Model->saveAll(data); $this->Model->commit(); 时,CakePHP需要获取每个保存的人员记录的ID,然后才能将他们的Car记录与数据库关联。 / p>

就像我说的那样,你可以扩展AppModel并增加saveAll方法来检查正在保存的数据的结构,并将它挂钩到你编写的自定义方法中,做你想做的事情,但它可能会添加更多的saveAll方法开销,而不是它的价值。

**如果没有大量自定义编码,您可以做的最佳优化是使用事务包装saveAll,因此您不会为每个事件初始化和提交。例如:

{{1}}