Как получить все значения данного пользовательского атрибута?


У меня есть пользовательский атрибут продукта test_id, который представляет собой текстовое поле. Я хочу получить все значения, присвоенные этому атрибуту в рамках данной коллекции продуктов.

Я нашел следующий способ сделать это. Но мне нужно знать, есть ли лучшее решение.

public function getAllTestIds() {
    $allValues = array();
    $collection = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('*');
    foreach($collection as $product) {
        $data = $product->getData();
        if(trim($data['test_id']) != '') {
            $allValues[] = $data['test_id'];
       }
   }
return $allValues;
}
Author: Fabian Schmengler, 2015-02-22

2 answers

@Sukeshini, добавьте атрибут groupByAttribute(), чтобы получить данные уникальных данных и удалить значение null.

public function getAllTestIds() {
    $allValues = array();
    $collection = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('*')->addAttributeToFilter('test_id', array(
    'notnull' => true,
    ))->groupByAttribute('test_id');

    foreach($collection as $product) {
        $data = $product->getData();
            $allValues[] = $data['test_id'];
       }
   }
return $allValues;
}
 5
Author: Amit Bera, 2015-02-22 02:29:31

Более простой способ:

public function getAllTestIds() {
    $collection = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('test_id');
    return $collection->getColumnValues('test_id');
}

Только выбор интересующего нас атрибута(ов) повышает производительность загрузки коллекции. Но getColumnValues() вызывает load(), поэтому он все еще не сильно оптимизирован.

Если вы хотите избежать загрузки всей коллекции, возможно, потребуется созданный вручную SQL-запрос.

 2
Author: Fabian Schmengler, 2015-12-30 20:26:44