如何获取所有属性的列表


Answers:


37

如果您需要MySQL查询,请尝试以下操作:

select attribute_id, attribute_code, frontend_label from eav_attribute where entity_type_id IN (select entity_type_id from eav_entity_type where entity_type_code = 'catalog_product')

如果您需要基于Magento的PHP脚本,则可以用Fabian代码替代,请尝试以下操作:

$attributes = Mage::getResourceModel('catalog/product_attribute_collection')
    ->getItems();

foreach ($attributes as $attribute){
    echo $attribute->getAttributecode();
    echo '<br>';
    echo $attribute->getFrontendLabel();
}

真好 Mage_Catalog_Model_Resource_Product_Attribute_Collection基本上完成了Fabian试图制作的东西。谢谢!
亚历克斯

不用

如何使用组ID获取属性列表?没有属性集
Attila Naghi 2014年

5

//Mage_Eav_Model_Mysql4_Entity_Attribute_Collection
Mage::getResourceModel('eav/entity_attribute_collection')->setEntityTypeFilter(Mage_Catalog_Model_Product::ENTITY);

应该做。

我们刚刚发现了一个错误,您必须传递entity_type_id:

$col = Mage::getResourceModel('eav/entity_attribute_collection')->setEntityTypeFilter(4);

确实

该代码是文档:

if ($type instanceof Mage_Eav_Model_Entity_Type) {
        $additionalTable = $type->getAdditionalAttributeTable();
        $id = $type->getId();
    } else {
        $additionalTable = $this->getResource()->getAdditionalAttributeTable($type);
        $id = $type;
    }

希望解决方案(通过@Alex评论更新)

您必须通过a Mage_Eav_Model_Entity_Type,这样才能正常工作,并且不进行硬编码:

$type = Mage::getModel('eav/entity_type')->loadByCode(Mage_Catalog_Model_Product::ENTITY)
Mage::getResourceModel('eav/entity_attribute_collection')->setEntityTypeFilter($type);

集合返回的计数为0 ...我记得有某种API或服务类可用于此,但找不到ATM。
亚历克斯

很好-但是4是硬编码的(即使很小也不会改变)。修复问题:-)
Alex

不,第一行不起作用。Mage_Catalog_Model_Product :: ENTITY是字符串,而不是Mage_Eav_Model_Entity_Type
Alex

我想我现在明白了:D
Fabian Blechschmidt

但是后来我来晚了。当我通过2k rep时,我会做的:p
Fabian Blechschmidt

2

这是为了获取所有属性

SELECT
    eav_attribute_option_value.option_id,
    eav_attribute_option_value.`value`,
    eav_attribute_option.attribute_id
                FROM
                        eav_attribute_option_value
                INNER JOIN eav_attribute_option ON eav_attribute_option_value.option_id = eav_attribute_option.option_id
                WHERE
                        eav_attribute_option.attribute_id = 135
                OR eav_attribute_option.attribute_id = 142 
                -- 135 = BRANDS
                -- 142 = TYPES
                GROUP BY
                        eav_attribute_option_value.option_id
                ORDER BY
                eav_attribute_option_value.`value` ASC

不要想用普通的SQL ...
亚历
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.