¿Cuál es el equivalente Magento ORM de "atributo SELECT DISTINCT FROM productos"?

8

Necesito recuperar una lista de todos los valores que se utilizan para un atributo de producto específico, en (pseudo) SQL:

SELECT DISTINCT attribute FROM products;

¿Cómo usaría el Magento ORM para generar una consulta equivalente? He probado la distinct()función pero no funciona como esperaba:

// 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');

Lo que estoy trabajando para obtener sería una matriz de attributevalores, sin duplicados

array('some value', 'some other value', 'a really common value', 'etc...');
STW
fuente
¿Estás buscando valores para todo tipo de atributos? o desplegables?
Rabea

Respuestas:

1

Gracias a Kalpesh, esto ya está en el blog:

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);

Aquí hay otra solución: https://stackoverflow.com/a/15509714/1480397

Pero no estoy seguro, si esto funciona en atributos no seleccionados.

Fabian Blechschmidt
fuente
Sí, solo funcionará para atributos seleccionados, pero para esos es el camino a seguir.
Fabian Schmengler
1

Puede enviar cualquier declaración SQL directamente a través de la conexión para adquirir cualquier información que no sea accesible a través de la api de 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);

Las funciones de consulta son fetchRow y fetchAll y están estructuradas:

fetchAll ($ estructurada_sql, $ bind_filters = array (), $ fetchMode = nulo)

ppostma1
fuente