Как получить все значения данного пользовательского атрибута?
У меня есть пользовательский атрибут продукта 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;
}
5
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