Вопрос

Как я могу получить коллекцию с наборами атрибутов, которые содержат определенный атрибут?
Я хочу быть в состоянии сделать это с одной прогулкой с одной коллекцией (на одном выборе), чтобы не загружать каждый набор атрибутов и проверять атрибуты внутри.
Я знаю, что это швы, как стандартные вещи, но в эти дни я немного медленно.

Это было полезно?

Решение

        $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();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top