【发布时间】:2018-01-04 14:23:59
【问题描述】:
我想知道是否有任何方法可以修改我的 PHP 代码以使数据库更轻松?此代码在 cronjob 中每分钟运行一次。
希望确保这对数据库的影响尽可能小。
<?php
ini_set('memory_limit', '128M');
define('MAGENTO_ROOT', getcwd());
//exit;
$time = time();
$time2 = $time - 0;
$to = date('Y-m-d H:i:s', $time2);
$lastTime = $time - 60; //orders from the past X seconds
$from = date('Y-m-d H:i:s', $lastTime);
$curDate = date('Y-m-d');
$mageFilename = '/app/Mage.php';
require_once $mageFilename;
Mage::app();
$order_collection = Mage::getResourceModel('sales/order_collection');
$order_collection->addAttributeToSelect('*')->addAttributeToFilter('updated_at', array(
'from' => $from,
'to' => $to
))->getSelect();
print count($order_collection);
foreach ($order_collection->getItems() as $order) {
$cards = Mage::getModel('giftcards/giftcards')->getCollection()->addFieldToFilter('order_id', $order->getId());
print count($cards);
foreach ($cards as $card) {
if ($card->getCardStatus() == 0) {
if ((($card->getMailDeliveryDate() == null) || ($curDate == $card->getMailDeliveryDate())) && $card->getCardType() != 'offline') {
$card->setCardStatus(1);
$card->save();
$card->send();
}
} elseif (($card->getCardStatus() == 1) && ($curDate < $card->getMailDeliveryDate())) {
$card->setCardStatus(0);
$card->save();
}
}
}
?>
【问题讨论】:
-
首先你只使用
id所以将addAttributeToSelect('*')更改为addAttributeToSelect('id') -
您也许还应该将其更改为仅拉取不是 card_status=1 的订单并添加一个 error_status 列,而不是 60 秒内的所有订单,就好像由于某种原因 cron 作业停止或错过了一个,它不会被发送。
标签: php mysql magento magento-1.9