Magento:Mage :: getModel清除数据

时间:2012-11-15 09:33:56

标签: magento model product

我必须开发一个Magento插件来导出产品。 我知道其他插件已经存在,但我必须这样做。

出口产品并不是很难,我使用类似的东西(精简版):

public function __construct()
{
    $this->_productModel = Mage::getModel('catalog/product');

    //Other actions ..
}

public function _toHtml()
{
    $products = $this->_productModel->getCollection()
    ->addStoreFilter($storeId)
    ->addAttributeToFilter('type_id',array('in'=>$_types))
    ->joinTable('cataloginventory/stock_item', 'product_id=entity_id', array('qty'=>'qty','is_in_stock' => 'is_in_stock'), $this->_getStockSQL(), 'inner');

    foreach($product_list as $product)
    {
        $_p = $this->_productModel->load($product);
        $p = $_p->getData();

        //Export data, parse and return it ..
    }
}

所以你可以看到,我使用私有var来存储Mage :: getModel('catalog / product')对象。 我想每次消耗大量资源时都会调用此方法,这就是我想要存储此变量的内容。

但是通过这个过程,如果产品是可配置产品的子产品,那么数据就是父产品的数据。

那么,我可以清除这个对象吗? 被称为Mage :: getModel('catalog / product')他需要大量资源吗? 我可以强制它加载子数据吗?

谢谢;)

1 个答案:

答案 0 :(得分:1)

是的,你可以。

请查看Mage_Catalog_Model_Convert_Adapter_Product以获取标准示例。

你会看到他们:

1)缓存产品型号:

public function getProductModel() {
  if (is_null($this->_productModel)) {
    $productModel = Mage::getModel('catalog/product');
    $this->_productModel = Mage::objects()->save($productModel);
  }
  return Mage::objects()->load($this->_productModel);
}

2)并在每次需要时(在saveRow方法的开头)重置它:

$product = $this->getProductModel()->reset();