データベースをループで更新したい。データは、ロードした xml ファイルからの価格と在庫情報です。更新したい項目は約8000あります。かなり時間がかかり、アイテム 3000 付近でサーバーがエラー 500 を返します。
私はそれを行うためのより良い、よりケーキのような方法がないかどうか疑問に思っています.
このようなタスクには、シェルまたはある種のイベント ディスパッチ システムを使用する必要があります。そして、変更したいデータをまとめて一度に読み取ります。あなたがそれを行う方法は、メモリがいっぱいになり、エラーが発生するだけです。
そして、適切な CakePHP で何かをしたい場合は、肥大化したコントローラーを書くのをやめてください。さらに重要なのは、query() の使用をやめることです。最初に MVC といくつかのソフトウェア設計原則を学び、理解することをお勧めします。
また、「artPriceArr3」や「art」などのひどい変数名の使用もやめてください。アートワークですか?記事?ある芸術家?これを読んでください:きれいなコード
ここに私のコントローラーコードがあります - ずっときれいです:
$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);