Magento addAttributeToFilter 与多选

Posted

技术标签:

【中文标题】Magento addAttributeToFilter 与多选【英文标题】:Magento addAttributeToFilter with Multiple Select 【发布时间】: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")); 谢谢亚历克斯,这似乎可行! 【参考方案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')),
    )
);

【讨论】:

以上是关于Magento addAttributeToFilter 与多选的主要内容,如果未能解决你的问题,请参考以下文章

安装完magento后,其他电脑无法访问magento,URL自动跳转到http://localhost/magento

Magento:为国家/地区 magento 设置默认商店视图

如何创建 Magento-2 扩展包以上传到 Magento-2 官方网站?

Magento 2 Theme Ultimate Guide - 如何创建Magento 2主题终极指南

Magento 2中文手册教程 - Magento 2 安装流程图

Magento主题结构