【问题标题】:Magento addAttributeToFilter with Multiple SelectMagento addAttributeToFilter 与多选
【发布时间】:2012-05-09 15:56:15
【问题描述】:

我在 Magento 多选属性上使用 addAttributeToFilter 时遇到问题。

我有一个汽车品牌的多选属性,所以内容是“奥迪”、“宝马”等。在我的示例中,我有一个轮胎产品,我从多项选择中选择了 5 个品牌。

我想显示将“BMW”品牌作为其选定字段之一的产品。

我尝试了以下所有方法都不起作用:

$products->addAttributeToFilter('make', array('like' => '%BMW%'));  
$products->addFieldToFilter('make', array('like' => '%BMW%'));  
$products->addAttributeToFilter('make', array('like' => '%38%')); // id of the attribute option

似乎没有任何效果。

【问题讨论】:

  • 是否 $products->addAttributeToFilter('make', '38') 或 $products->addAttributeToFilter('make', array('eq', 38));给你什么?
  • 它不起作用。由于它是一个多选属性,Magento 将“make”创建为这样的字符串:28,30,35,38 - 所以如果我需要按 id 38 的 BMW 过滤产品,那么我需要它来检查所有这些值。
  • finset我可以选择吗?类似$products->addAttributeToFilter("make", array("finset"=>"38"));
  • 谢谢亚历克斯,这似乎可行!

标签: magento addattribute


【解决方案1】:

解决方案是使用Find In Set 查询,例如:

$this->_productCollection->addAttributeToFilter("make", array("finset"=>"38"));

可以在这里看到讨论:http://www.magentocommerce.com/boards/viewthread/201312/

以及不同选项的列表:http://www.magentocommerce.com/knowledge-base/entry/magento-for-dev-part-8-varien-data-collections

【讨论】:

  • 我发现这也适用于常规下拉菜单,而不仅仅是多选。我不确定常规下拉菜单是否会降低速度。在 ee 1.14.2 上测试
  • 我必须登录才能投票这个答案。谢谢你拯救了我的一天。
【解决方案2】:

试试下面的语法 finset 它对我有用。

$collection->addAttributeToFilter($attribute,
    array(
        array('finset'=> array('237')),
        array('finset'=> array('238')),
        array('finset'=> array('239')),
    )
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    相关资源
    最近更新 更多