Was ist das Magento ORM-Äquivalent von "SELECT DISTINCT Attribut FROM Produkte"?

8

Ich muss eine Liste aller Werte abrufen, die für ein bestimmtes Produktattribut in (Pseudo) SQL verwendet werden:

SELECT DISTINCT attribute FROM products;

Wie würde ich das Magento ORM verwenden, um eine entsprechende Abfrage zu generieren? Ich habe die distinct()Funktion ausprobiert , aber sie funktioniert nicht wie erwartet:

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

Ich arbeite daran, ein Array von attributeWerten ohne Duplikate zu erhalten

array('some value', 'some other value', 'a really common value', 'etc...');
STW
quelle
Suchen Sie nach Werten für alle Arten von Attributen? oder Dropdowns?
Rabea

Antworten:

1

Dank Kalpesh ist dies bereits gebloggt:

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

Hier ist eine andere Lösung: https://stackoverflow.com/a/15509714/1480397

Ich bin mir aber nicht sicher, ob dies bei nicht ausgewählten Attributen funktioniert.

Fabian Blechschmidt
quelle
Ja, es funktioniert nur für ausgewählte Attribute, aber für diese ist es der richtige Weg.
Fabian Schmengler
1

Sie können alle SQL-Anweisungen direkt über die Verbindung senden, um Daten abzurufen, auf die über die API von magentos nicht zugegriffen werden kann.

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

Die Abfragefunktionen sind fetchRow und fetchAll und sind strukturiert:

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

ppostma1
quelle