0

How can I get a collection with the attribute sets that contain a certain attribute?
I want to be able do to this from a single collection walk (on single select), to avoid loading each attribute set and checking the attributes inside.
I know this seams like standard stuff, but I'm a bit slow these days.

4 Answers 4

4
        $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');
2
  • Works like a charm, nice one! Commented Sep 18, 2013 at 13:42
  • Yep. Exactly what I needed.
    – Marius
    Commented Sep 18, 2013 at 13:48
2

I found this right before @mageUz wrote the perfect answer. It's fast if you need only the attribute set ids. Maybe someone else needs it.

$attributeId = 123;
$setInfo = Mage::getResourceModel('eav/entity_attribute_set')
        ->getSetInfo(array($attributeId));
$attributeSetIds = array_keys($setInfo[$attributeId]);
0
1

I don't know how to do it with Magento objects but a direct query would work just as well I guess

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` 
2
  • Thanks. I found that table also. I guess I have to write my own resource model in order to use this query. +1, but I don't accept the answer yet. I'm hoping for a Magento solution
    – Marius
    Commented Sep 18, 2013 at 13:15
  • Challenge accepted! If I'm home early tonight that is ^^ Commented Sep 18, 2013 at 13:18
0

You can use below code to get all attribute of particular attribute set.

 $data =   Mage::getResourceModel('catalog/product_attribute_collection')
        ->setAttributeSetFilter(9) // Add attribute set ID
        ->load();
3
  • Thanks, but I think you misunderstood the question. I want the other way around. All ATTRIBUTE SETS that contain a certain ATTRIBUTE.
    – Marius
    Commented Sep 18, 2013 at 12:22
  • sorry for the inconvenience. But I'll try to find magento solution. Commented Sep 18, 2013 at 13:54
  • No problem. no inconvenience at all.
    – Marius
    Commented Sep 18, 2013 at 13:55

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.