2012-04-24 56 views
4

我希望有人能帮我解答这个问题。我正尝试使用集合从Magento目录模型中加载一些数据。代码如下所示:将属性添加到Magento中的收集请求

$model = Mage::getModel('catalog/product'); 
$collection = $model->getCollection(); 
$collection->addAttributeToSelect('short_description'); 
$collection->addFieldToFilter('SKU',array('like' => array('%EBOOK%'))); 
$collection->load(); 
var_dump($collection->getData()); 

这将产生对象的转储,在平板产品目录表的所有领域,但不是说我已要求与$collection->addAttributeToSelect()法领域。无论我用这个方法指定什么字段(即使是'*'),我都无法让集合返回除标准字段以外的任何其他字段。我也不能使用$collection->removeFieldFromSelect(NULL)这个应该工作的任何字段。

我在做一些愚蠢/错误/两者?

在此先感谢。

+0

echo get_class($ collection)的输出是什么;'? – benmarks 2012-04-25 01:17:06

+0

嗨Benmark。输出是'Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection' – MJA 2012-04-25 07:50:31

+0

这家伙([link] http://www.magentocommerce.com/boards/viewthread/48044/)在某些时候似乎有完全相同的问题以及... – MJA 2012-04-25 08:42:48

回答

4

这是因为您可以在集合上调用getData(),但不能在此集合的产品上调用。

我从来没有真正分析为什么出现这种情况,但是如果你使用的

foreach ($collection as $product) { 
    var_dump($product->getData()); 
} 

代替

$collection->load(); 
var_dump($collection->getData()); 

你会得到你期待中的数据。

+0

Jürgen,你是天才,谢谢!我不明白为什么这些属性在直接集合对象中不可用,但它并不重要 - 我只是检查了我的SQL日志,看看你的方法是否需要更多的查询,事实上它似乎产生一个更高效的查询(至少就SQL代码而言)。 – MJA 2012-04-25 09:26:24

+0

Magento中的集合建模实体数据的聚合,排序和过滤。将集合对象视为迭代访问结果的元对象。请参阅'Mage_Core_Resource_Db_Collection_Abstract','Varien_Data_Collection_Db'和'Varien_Data_Collection' – benmarks 2012-04-25 11:19:24

相关问题