Pregunta

¿Cómo puedo obtener una colección con los conjuntos de atributos que contienen un cierto atributo?
Quiero poder hacer esto desde una sola caminata de colección (en una sola selección), para evitar cargar cada conjunto de atributos y verificar los atributos dentro.
Sé que estas costuras como las cosas estándar, pero soy un poco lento en estos días.

¿Fue útil?

Solución

        $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');

Otros consejos

Encontré esto justo antes de que @Mageuz escribiera la respuesta perfecta. Es rápido si solo necesita los ID de conjunto de atributos. Quizás alguien más lo necesite.

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

No sé cómo hacerlo con objetos magento, pero una consulta directa funcionaría igual de bien, supongo

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` 

Puede usar el código a continuación para obtener todo el atributo de un conjunto de atributos particular.

 $data =   Mage::getResourceModel('catalog/product_attribute_collection')
        ->setAttributeSetFilter(9) // Add attribute set ID
        ->load();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top