Magento getSingleton() 与 getModel() 问题
我想在 Magento 中遍历一系列产品 ID.在循环中,我将产品的一些自定义属性显示为:
I want to loop over an array of product IDs in Magento. In the loop I am displaying some custom attributes of the products as:
foreach ($products as $product) {
$model = Mage::getSingleton('catalog/product')->load($product['id']);
echo '<br>' . $model->getCredits();
}
问题是,如果第一项的 getCredits()
值为 true
,那么所有后续项都显示 true
,即使它们没有值 true
.
Problem is that if the value of getCredits()
for the first item is true
then all the subsequent items show true
even if they do not have the value true
.
但是当我使用 Mage::getModel()
而不是 Mage::getSingleton()
时,属性值显示正确.
But when I use Mage::getModel()
instead of Mage::getSingleton()
, the attribute values are displayed correct.
谁能解释一下这个区别?
Can anyone please explain this difference?
推荐答案
Mage::getModel() 将始终为给定模型返回一个新对象:
Mage::getModel() will always return a new Object for the given model:
/**
* Retrieve model object
*
* @link Mage_Core_Model_Config::getModelInstance
* @param string $modelClass
* @param array|object $arguments
* @return Mage_Core_Model_Abstract|false
*/
public static function getModel($modelClass = '', $arguments = array())
{
return self::getConfig()->getModelInstance($modelClass, $arguments);
}
Mage::getSingleton() 将检查给定模型的对象是否已经存在,如果存在则返回.如果它不存在,它将创建一个给定模型的新对象,并将其放入已存在的注册表中.下一次调用不会返回新对象,而是返回现有对象:
Mage::getSingleton() will check whether the Object of the given model already exists and return that if it does. If it doesn't exist, it will create a new object of the given model and put in registry that it already exists. Next call will not return a new object but the existing one:
/**
* Retrieve model object singleton
*
* @param string $modelClass
* @param array $arguments
* @return Mage_Core_Model_Abstract
*/
public static function getSingleton($modelClass='', array $arguments=array())
{
$registryKey = '_singleton/'.$modelClass;
if (!self::registry($registryKey)) {
self::register($registryKey, self::getModel($modelClass, $arguments));
}
return self::registry($registryKey);
}
在您的情况下,您总是想要一个全新的 Product 对象/模型,因为每个产品都是独一无二的...
In your case you always want a completely new Product object/model since every product is unique...
相关文章