Magento 获取未加载所有属性的相关产品
Posted
技术标签:
【中文标题】Magento 获取未加载所有属性的相关产品【英文标题】:Magento get related products not having all attributes loaded 【发布时间】:2017-08-22 23:46:06 【问题描述】:我正在接手一个项目,看到之前的开发人员添加了一个自定义相关产品关联。所以他实现了一个函数来让关联的集合看起来像这样
/**
* Retrieve collection CustomRelated product
*
* @return Mage_Catalog_Model_Resource_Product_Link_Product_Collection
*/
public function getCustomRelatedProductCollection()
$collection = $this->getLinkInstance()->useCustomRelatedLinks()
->getProductCollection()
->setIsStrongMode();
$collection->setProduct($this);
return $collection;
然后在phtml文件中,他是这样叫出来的
$upsell_products = $_product->getCustomRelatedProductCollection();
然后他在 foreach 中使用该集合,集合中的每个元素都使用模型“目录/产品”,但不知何故,它没有加载足够的属性,如价格和名称
只有当我像这样再次调用加载函数时它才会加载所有属性
Mage::getModel('catalog/product')->load($p->getId())
我不想这样做,因为重新加载模型毫无意义,我还是 Magento 的新手,所以我不确定如何让上面的 get 集合完全加载产品模型,有什么想法吗?
【问题讨论】:
您是否正在尝试获取相关产品?还是您想获得相关产品?哪一个? @Nickool 你能帮忙解释一下两者之间的区别吗?之前的开发者实现了产品之间的自定义关联,所以我不知道它应该称为相关还是关联,就像你买这个你也会喜欢这个 【参考方案1】:您可以像下面这样加载需要的属性(名称、价格)。
public function getCustomRelatedProductCollection()
$collection = $this->getLinkInstance()->useCustomRelatedLinks()
->getProductCollection()
->addAttributeToSelect(array("name", "price"))
->setIsStrongMode();
$collection->setProduct($this);
return $collection;
【讨论】:
谢谢,这可行,但它与 Jitendra 的答案相同,我只能将 1 个答案标记为解决方案 没关系。没有任何问题。仅供参考,这是仅加载具有必需属性的集合的最佳方式。如果您选择使用'*',则它是具有所有属性的负载集合。因此,如果我们在数据库中有很多属性,就会出现查询性能问题。【参考方案2】://我在您的代码中添加了新行。请立即检查。
public function getCustomRelatedProductCollection()
$collection = $this->getLinkInstance()->useCustomRelatedLinks()
->getProductCollection()
->setIsStrongMode();
$collection->setProduct($this);
$collection->addAttributeToSelect('*'); //New line added by me.
return $collection;
【讨论】:
这行得通,谢谢!为什么不默认为“select *”?以上是关于Magento 获取未加载所有属性的相关产品的主要内容,如果未能解决你的问题,请参考以下文章