我想在循环中更新我的数据库。数据是我加载的xml文件中的价格和库存信息。我想要更新大约8000件物品。这需要相当长的时间,大约在项目3000处,服务器响应时出现错误500.
我想知道是否有一种更好的,更“蛋糕化”的方法来做到这一点。
答案 0 :(得分:1)
对于像这样的任务,应该使用shell或某种事件调度系统。并且一次性读取您想要以块的形式更改的数据。你这样做只会导致内存填满并出错。
如果你想在适当的CakePHP中做一些事情,那就停止编写臃肿的控制器并且更关键:停止使用query()。我建议你先学习和理解MVC和一些软件设计原则。
也停止使用可怕的变量名称,如“artPriceArr3”或“art”。这是艺术品吗?一篇文章?一个艺术家?阅读:Clean Code
答案 1 :(得分:0)
这是我的控制器代码 - 更清洁:
$this->Stock->query('TRUNCATE stocks;');
$itemsFromXml = $this->XmlPricelist->getXml();
$fields = array('id','amount','price');
$values = array();
foreach($itemsFromXml as $key=>$item){
$values[] = array($item['id'],$item['stock'],$item['price']);
}
$this->multiSave($this->Stock,$values,$fields);