哪种方式在magento中加载模型更好?

哪种方式在magento中加载模型更好?,magento,collections,magento-1.7,Magento,Collections,Magento 1.7,我不知道我的要求是否正确。我需要加载一个产品,更改一些值并保存它。我的问题是,哪种方式是合适的。目前我正在使用这种方式: $id = Mage::getModel('catalog/product')->getIdBySku($sku); $product = Mage::getModel('catalog/product')->load($id); 1) 一般来说,即使使用40K产品,它也能正常工作。但我听说这种方式会导致内存泄漏?对于该解决方案,我还了解到,如果禁用reinde

我不知道我的要求是否正确。我需要加载一个产品,更改一些值并保存它。我的问题是,哪种方式是合适的。目前我正在使用这种方式:

$id = Mage::getModel('catalog/product')->getIdBySku($sku);
$product = Mage::getModel('catalog/product')->load($id);
1) 一般来说,即使使用40K产品,它也能正常工作。但我听说这种方式会导致内存泄漏?对于该解决方案,我还了解到,如果禁用reindex功能,可以缩短处理时间

2) 如果我使用另一种方式将其作为集合加载,然后应用一些过滤器,例如
addFieldToFilter('sku',$我想要的产品)
会更好吗


当我说“更好”时,我的意思是:1)magento方式,2)省时3)不做我不需要做的事情。

每次调用以下代码片段时
Mage::getModel('catalog/product')
magento都会在内存中创建一个新的模型对象。这将导致内存浪费。你可以这样做

$model = Mage::getModel('catalog/product');
$id = $model->getIdBySku($sku);
$product = $model->load($id);
同时
如果您有产品对象
可以使用以下代码

$collection = Mage::getModel('catalog/product')->getCollection();
$product = $collection->addFieldToFilter('sku',$the_product_i_want);

我想说你似乎在混淆这些概念。addFieldToFilter-是关于集合的。Mage::getModel('catalog/product')->load()-是关于模型的。我假设您的问题的“正确”形式是-什么是最好的:1)首先从db加载所有产品,然后通过php过滤您需要处理的产品2)通过mysql过滤所需的产品(这是addFieldToFilter所做的),然后更新所有加载的产品,然后答案是第二个选项。如果我这样做:Mage::getModel('catalog/product')->load(),我加载所有产品?因为我调用模型产品?即使我使用id加载一个产品?很抱歉我的问题,但我正试图更好地理解Magento@罗巴,明白了。嗯,model->load()是加载模型的方法。“模型”概念大致上是指数据结构的单个实例。也就是说,product是数据结构,当您调用->load($id)时,您可以通过从数据库中获取的数据(按给定的$id)填充该结构。而addFieldToFilter应用于集合,而不是模型。集合概念-是一组产品,通过单个请求从数据库中获取(在大多数情况下,集合是抽象的,表示一组单个实例)。因此,当您执行->addFieldToFilter时,您会将条件添加到集合的请求中。因此,对于我加载产品的情况,进行一些更改,然后将其保存回去,哪种解决方案是最好的?如果我们可以这么说……嗯。。。一般来说,如果你有一个巨大的数据库,最好看看MAGMI,因为它使用直接Sql静默来修改数据,这是有史以来最快的方式。Magento代码是它的包装器。准确地说,如果你使用MAGMI,这不会像你在C中可能发现的那样导致经典内存泄漏,但会导致高内存使用率。@siliconrockstar:谢谢,你是对的,我修改了答案