Quel est l'équivalent Magento ORM de «SELECT DISTINCT attribute FROM products»?


8

J'ai besoin de récupérer une liste de toutes les valeurs qui sont utilisées pour un attribut de produit spécifique, en (pseudo) SQL:

SELECT DISTINCT attribute FROM products;

Comment utiliser l'ORM Magento pour générer une requête équivalente? J'ai essayé la distinct()fonction mais elle ne fonctionne pas comme je m'y attendais:

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

Ce que je cherche à obtenir serait un tableau de attributevaleurs, sans doublons

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

Recherchez-vous des valeurs pour tous les types d'attributs? ou des listes déroulantes?
Rabea

Réponses:


1

Grâce à kalpesh, c'est déjà blogué:

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

Voici une autre solution: https://stackoverflow.com/a/15509714/1480397

Mais je ne sais pas si cela fonctionne sur des attributs non sélectionnés.


Oui, cela ne fonctionnera que pour les attributs de sélection, mais pour ceux-ci, c'est la voie à suivre.
Fabian Schmengler

1

Vous pouvez soumettre toutes les instructions SQL directement via la connexion pour acquérir toutes les données qui ne sont pas accessibles via l'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);

Les fonctions de requête sont fetchRow et fetchAll et sont structurées:

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.