2012-04-24 57 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

相關問題