Наборы атрибутов с конкретным атрибутом
-
16-10-2019 - |
Вопрос
Как я могу получить коллекцию с наборами атрибутов, которые содержат определенный атрибут?
Я хочу быть в состоянии сделать это с одной прогулкой с одной коллекцией (на одном выборе), чтобы не загружать каждый набор атрибутов и проверять атрибуты внутри.
Я знаю, что это швы, как стандартные вещи, но в эти дни я немного медленно.
Решение
$attributeId = 96;
$collection = Mage::getModel('eav/entity_attribute_set')
->getCollection()
->addFieldToFilter('eav_entity_attribute.attribute_id', $attributeId)
->addFieldToFilter('eav_entity_type.entity_type_code', Mage_Catalog_Model_Product::ENTITY)
->join(array('eav_entity_type'=> 'eav/entity_type'), 'eav_entity_type.entity_type_id=main_table.entity_type_id','entity_type_code')
->join(array('eav_entity_attribute'=> 'eav/entity_attribute'), 'eav_entity_attribute.attribute_set_id=main_table.attribute_set_id', 'attribute_id');
Другие советы
Я нашел это прямо перед тем, как @mageuz написал идеальный ответ. Это быстро, если вам нужны только идентификаторы набора атрибутов. Может быть, кому -то еще это нужно.
$attributeId = 123;
$setInfo = Mage::getResourceModel('eav/entity_attribute_set')
->getSetInfo(array($attributeId));
$attributeSetIds = array_keys($setInfo[$attributeId]);
Я не знаю, как это сделать с объектами Magento, но прямой запрос будет работать так же хорошо, я думаю
SELECT `eav_entity_attribute`.`attribute_set_id`
FROM `eav_attribute` , `eav_entity_attribute`
WHERE `eav_attribute`.`attribute_code` = 'cost'
AND `eav_attribute`.`attribute_id` = `eav_entity_attribute`.`attribute_id`
Вы можете использовать ниже код, чтобы получить все атрибуты определенного набора атрибутов.
$data = Mage::getResourceModel('catalog/product_attribute_collection')
->setAttributeSetFilter(9) // Add attribute set ID
->load();
Не связан с magento.stackexchange