如何通过magento中的自定义下拉属性值过滤所有产品?

ati*_*tif 4 zend-framework magento magento-1.4 magento-1.5

我创建了一个名为" by_item " 的自定义下拉属性,并添加了一些选项,如"套房,新娘,牛仔裤"等.

<?php   // get all products
        $collection = Mage::getModel('catalog/product')->getCollection();
        $collection->addAttributeToSelect('*');

        //filter codition
        $collection->addFieldToFilter(array(
                        array('attribute'=>'by_item','eq'=>"Suite"),
                    ));

        foreach ($collection as $product) {

        var_dump($product->getData());
    }

    ?>
Run Code Online (Sandbox Code Playgroud)

它什么都没有:(

但是当我这样做时:

<?php 
    $collection = Mage::getModel('catalog/product')->getCollection();
    $collection->addAttributeToSelect('*');

    //filter codition
    //$collection->addFieldToFilter(array(
    //                array('attribute'=>'by_item','eq'=>"Suite"),
    //            ));

    foreach ($collection as $product) {
    echo $product->getName() . "<br />";


}

?>
Run Code Online (Sandbox Code Playgroud)

它给了我所有产品的名称.我访问了很多文章,但没有遇到任何问题:(

Jür*_*len 9

这不起作用,因为您使用的是OR版本(嵌套数组)addFieldToFilter().

你想要的是AND版本.试试这个:

$collection = Mage::getModel('catalog/product')->getCollection();
    ->addAttributeToSelect('*')
    ->addFieldToFilter('by_item', array('eq' => 'Suite'));

foreach ($collection as $product) {
    var_dump($product->debug());
}
Run Code Online (Sandbox Code Playgroud)

编辑

忽略了OP正在谈论"下拉"属性(不是文本字段).

当使用addFieldToFilter()"Dropdown"属性进行过滤时,必须使用选项的value/id,而不是选项的text/label.

例如,如果您的自定义下拉属性具有此选项

id    text
12    Suite
13    Bridal
14    Jeans
Run Code Online (Sandbox Code Playgroud)

并且您希望按"套件"进行过滤,您可以这样编码:

$collection = Mage::getModel('catalog/product')->getCollection();
    ->addAttributeToSelect('*')
    ->addFieldToFilter('by_item', array('eq' => '12'));
Run Code Online (Sandbox Code Playgroud)

您也可以间接使用您的选项的文本/标签:

$collection = Mage::getModel('catalog/product')->getCollection();
    ->addAttributeToSelect('*')
    ->addFieldToFilter(
        'by_item',
        array(
            'eq' => Mage::getResourceModel('catalog/product')
                        ->getAttribute('by_item')
                        ->getSource()
                        ->getOptionId('Suite')
        )
    );
Run Code Online (Sandbox Code Playgroud)