我有一个使用cakephp中的saveall保存到数据库中的数组。最近我注意到该数组有大约100组值,并运行100个插入查询来保存它。这是作为事务完成的,然后再提交它。每个查询大约需要1毫秒。所以100个查询会占用大量时间。我确信在一个查询中有一些方法可以做到这一点。
我试过
$this->User->savemany($data)
但没有变化。
有没有其他方法可以保存这样的东西
INSERT INTO users (ID, Value)
VALUES(1,'First'),(2,'Second'),(3,'Third');
谢谢
答案 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}}