Что такое эквивалентность Magento ORM для «атрибута SELECT DISTINCT ИЗ продуктов»?


8

Мне нужно получить список всех значений, которые используются для определенного атрибута продукта, в (псевдо) SQL:

SELECT DISTINCT attribute FROM products;

Как бы я использовал Magento ORM для создания эквивалентного запроса? Я пробовал эту distinct()функцию, но она не работает так, как я ожидал:

// Returns an array of NULL with a length equal to all products in the catalog
Mage::getModel('catalog/product')->getCollection()
            ->addAttributeToSelect('attribute')
            ->distinct(true)
            ->getColumnValues('attribute');

То, что я работаю, чтобы получить массив attributeзначений без дубликатов

array('some value', 'some other value', 'a really common value', 'etc...');

Вы ищете значения для всех типов атрибутов? или выпадающие?
Рабея

Ответы:


1

Благодаря Kalpesh, это уже в блоге:

http://ka.lpe.sh/2011/06/06/magento-get-all-the-values-of-a-magento-eav-for-a-particular-attribute-code/

$attribute = Mage::getModel('eav/config')->getAttribute('catalog_product', 'color'); //here, "color" is the attribute_code
$allOptions = $attribute->getSource()->getAllOptions(true, true);
foreach ($allOptions as $instance) {
    $myArray[$instance['value']] = $instance['label'];
}
Mage::log($myArray);

Вот еще одно решение: https://stackoverflow.com/a/15509714/1480397

Но я не уверен, работает ли это на невыбранных атрибутах.


Да, это будет работать только для select-атрибутов, но для тех это путь.
Фабиан Шменглер

1

Вы можете отправить любые операторы SQL прямо через соединение, чтобы получить любые данные, которые недоступны через API magentos.

$db_resource = Mage::getSingleton('core/resource');
$db_connection = $db_resource->getConnection('core_write');
$sql = sprintf("SELECT DISTINCT attribute FROM `%s`", $db_resource->getTableName('product'));
$dataset = $db_connection->fetchAll($sql);

Функции запроса являются fetchRow и fetchAll и имеют структуру:

fetchAll ($ structured_sql, $ bind_filters = array (), $ fetchMode = null)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.