Magento - 加载模型时限制所选字段而不收集

时间:2012-12-19 21:34:36

标签: magento model

我知道如何在处理集合时限制字段,但我想知道的是,如果我可以在使用getModel() - > load($ id)时限制所选字段。

我的思维过程是,如果我知道我使用的ID:

Mage::getModel('model')->load($id)

而不是:

Mage::getModel('model')->getCollection()->addFieldToFilter('id', $id)->getFirstItem();

问题是load($ id)返回所有内容。我知道我可以在集合上使用addFieldToSelect。使用load()时是否有等价物?当我谷歌这个时,我得到了收集方法。

谢谢, GG

编辑: 我只想补充一点,如果收集方式是如何完成而不是那么好。我只是想确保使用load()无法完成。

2 个答案:

答案 0 :(得分:2)

您可以尝试仅使用一个项目加载一个集合(正如您现在所做的那样),并选择您想要使用的属性:

addAttributeToSelect('you_attribute_code_here')

这将返回一个集合(虽然包含一个项目),只返回您希望返回的属性。例如:

$productIds = array(166);
$collection = Mage::getModel('catalog/product')->getCollection()
    ->addAttributeToSelect('description')
    ->addFieldToFilter('entity_id', array('in' => $productIds));

$product = $collection->getFirstItem();

答案 1 :(得分:2)

不,除了完全重写模型代码之外别无选择,这可能不是你想要做的。 模型加载调用只能用于加载完整条目 - 您可以指定的是用于加载的属性。例如:

Mage::getModel('catalog/product')->load($sku,'sku')

将通过其sku加载产品。

事实上,模型加载本身只是按照它的资源来执行:

$this->_getResource()->load($this, $id, $field);

但是资源加载方法也没有提供过滤特定属性的功能,因此您将始终加载完整包或使用该集合。