magento如何检查属性值是否已分配给任何产品

时间:2015-04-22 12:47:19

标签: php magento

如何检查属性值是否已分配给任何产品?我有一个产品属性A,其值为aa,bb,cc,dd,我想知道任何产品是否具有aa或bb或cc或dd属性值。

,即产品属性表中的count(aa)> 0

到目前为止我的代码

/*Get the Attributes for cat id 9 */
$layer = Mage::getModel("catalog/layer");
$layer->setCurrentCategory(Mage::getModel('catalog/category')->load(9));
$validAttributes = array();
foreach ($layer->getFilterableAttributes() as $attribute) {
    //allow only select attributes - you can implement your additional filters here
    if ($attribute->getFrontendInput() == 'select'){
        $validAttributes[] = $attribute;
    }
}

$i=0;
$name='';
/*Create the menu html in loop*/
foreach ($validAttributes as $attribute) {

    $options = $attribute->getSource()->getAllOptions();
    $attr=$attribute->getData();
    $name = $attr['frontend_label'];

    $temp.= '<li class=" nav-item level0 nav-1 level-top  level-top first last nav-item--parent classic nav-item--only-subcategories parent">
    <a href="#" class="level-top"> 
        <span>'.$name.'</span>
        <span class="caret">&nbsp;</span> 
    </a>
    <span class="opener"></span><ul class="level0 nav-submenu nav-panel--dropdown nav-panel" style="left: 44px; top: 40px; display: none;">';




    foreach ($options as $option)
    {
            //Here I want to check count($option['value']) in product >0
        $temp.='<li class="nav-item level1 nav-1-1 first last classic" >
                <a href="'.$catUrl.'?'.$attr['attribute_code'].'='.$option['value'].'">
                    <span> '.$option['label'].'</span>
                </a></li>';


    }
    $temp.= '</ul></li>';
    $i++;

}

3 个答案:

答案 0 :(得分:0)

使用此代码简单而有效

$prod_ids_array=Mage::getModel('catalog/product')->getCollection()
                              ->addAttributeToFilter('custom_attribute_code',array('notnull' => true))
                              ->getAllIds();
print_r($prod_ids_array);

您将获得具有属性值的产品ID。

答案 1 :(得分:0)

您可以通过运行SQL查询轻松获取它。

我想你有属性id = 74,属性类型是整数

如果是整数,那么数据将存储在catalog_product_entity_int

select entity_id from catalog_product_entity_int where attribute_id = 73 and store_id = 0

所以现在你有了你正在寻找的ID列表。

答案 2 :(得分:0)

我知道我晚会晚了,但是这是一个查询,以防您想通过attribute_code搜索:

SELECT
  cpe1.sku,
  cpe1.value
FROM
  catalog_product_entity_int cpei
  LEFT JOIN eav_entity_attribute eav ON eav.entity_attribute_id = cpei.attribute_id
  LEFT JOIN catalog_product_entity cpe1 ON cpe1.row_id = cpei.row_id
  LEFT JOIN eav_attribute ea ON ea.attribute_id = cpei.attribute_id
WHERE
  ea.attribute_code = "my_attribute_code"
  AND cpe1.attribute_set_id IS NOT NULL;

这仅显示Integer属性“ catalog_product_entity_int”,还有其他表,具体取决于您的属性类型:

  • catalog_product_entity_datetime
  • catalog_product_entity_decimal
  • catalog_product_entity_gallery
  • catalog_product_entity_int
  • catalog_product_entity_media_gallery
  • catalog_product_entity_text
  • catalog_product_entity_tier_price
  • catalog_product_entity_varchar