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

+0

Привет Benmarks. Результатом является 'Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection' – MJA

+0

Этот парень ([ссылка] http://www.magentocommerce.com/boards/viewthread/48044/), похоже, имел точно такую ​​же проблему и в какой-то момент ... – MJA

ответ

4

Это потому, что вы вызываете getData() в коллекцию, но не по продукту этой коллекции.

Я никогда не анализировали, почему это происходит, но если вы используете

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

вместо

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

вы получите данные вы ожидаете.

+0

Юрген, вы гений, спасибо! Я не могу понять, почему атрибуты не доступны в прямом объекте коллекции, но это не имеет особого значения - я просто проверил свои журналы SQL, чтобы узнать, вызвал ли ваш метод больше запросов, и на самом деле это, по-видимому, создает более эффективный запрос (по крайней мере, с точки зрения меньшего кода SQL). – MJA

+0

Коллекции в Magento моделируют агрегацию, сортировку и фильтрацию данных сущности. Подумайте о том, что объект коллекции является метаобъектом для доступа к результатам итеративно. См. 'Mage_Core_Resource_Db_Collection_Abstract',' Varien_Data_Collection_Db' и 'Varien_Data_Collection' – benmarks

Смежные вопросы