Conjuntos de atributos con atributo específico
-
16-10-2019 - |
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.
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();