2012-04-23 37 views

回答

1

对于这样的任务,应使用shell或某种事件调度系统。然后读取您想要一次更换的数据块。你这样做只会导致填充内存并出错。

如果你想在正确的CakePHP中做一些事情,停止编写臃肿的控制器和更重要的:停止使用query()。我建议你先学习和理解MVC和一些软件设计原则。

也停止使用可怕的变量名称,如“artPriceArr3”或“艺术”。这是一件艺术品吗?一篇文章?一个艺术家?阅读:Clean Code

+0

您也可以使用'DboSource :: insertMulti()'插入一堆排在一个事务中,而不是单独运行查询每个插入。有关示例实现,请参见['CakeTestFixture :: insert()'] [http://api20.cakephp.org/view_source/cake-test-fixture#line-201]。 – jeremyharris 2012-04-23 14:31:05

+0

@burzum感谢您的回复。你是对的。查询不应该在控制器中。整体是拼凑而成的,应该重写。 – user1350963 2012-04-23 20:47:59

+0

@ user1350963请参阅'Model :: updateAll()'(http://api20.cakephp.org/class/model#method-ModelupdateAll)。 – jeremyharris 2012-04-23 20:51:44

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);