I'm trying to run a one-time script (in a custom module upgrade) to set a new attribute last_order_date based on the date of that customer's last order.
I have this script:
$users = mage::getModel('customer/customer')->getCollection()
->addAttributeToSelect('last_order_date');
foreach ($users as $user){
$lastDate = $user->getData('last_order_date');
if(empty($lastDate)){
$orderCollection = Mage::getModel('sales/order')->getCollection()
->addFilter('customer_id', $user->getId())
->setOrder('created_at', Varien_Data_Collection_Db::SORT_ORDER_DESC)
;
$numberOfOrders = $orderCollection->count();
if($numberOfOrders!=0){
$newestOrder = $orderCollection->getFirstItem();
$lastOrderDate = $newestOrder->getCreatedAt();
$user->setData('last_order_date', $lastOrderDate);
$user->save();
}
}
}
But it's causing a memory leak:
Fatal error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 32 bytes) in [..]/web-root/lib/Zend/Db/Adapter/Pdo/Abstract.php on line 292
Which I understand is due to the looped calls to Mage::getModel('sales/order')
.
How do I achieve this without the repeated calls?