首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何通过select下拉属性筛选magento集合?

如何通过select下拉属性筛选magento集合?
EN

Stack Overflow用户
提问于 2013-02-09 02:02:32
回答 2查看 18.7K关注 0票数 5

在magento中,我有一个名为cl_designer的属性,它是一个选择下拉选项。我想对它的products集合进行过滤,如下所示:

代码语言:javascript
复制
$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToFilter('cl_designer', array('like' => $filter));

但是它不起作用!当我使用$collection->getselect()打印出查询时,我看到它正在将$filter与catalog_product_entity_int.value进行比较。但这是错误的,因为对于select选项,catalog_product_entity_int.value是option_id,而不是值。那么我如何让它根据实际的期权价值进行过滤呢?

EN

Stack Overflow用户

发布于 2013-02-09 02:02:32

简而言之,就像这样:

代码语言:javascript
复制
$collection->
    addAttributeToFilter(
        array(
            array('attribute' => 'cl_designer', 'eq' => ''),
            array('attribute' => 'cl_designer', 'neq' => '')
        ))->
    joinTable(array('cl_designer_value'=>'eav_attribute_option_value'),'option_id = cl_designer', array('cl_designer_value' => 'value'))->
    addAttributeToFilter('cl_designer_value', array('like' => $filter));

第一个addAttributeToFilter需要包含正确的catalog_product_entity_int表,并通过entity_id、attribute_id和store_id正确地连接它。接下来,我们使用joinTable连接到eav_attribute_option_value。

joinTable很复杂。第一个参数是要联接的表数组,其形式为别名=>表名称。表名可以是原始名称(比如这里),也可以是标准的magento斜杠表示法。第二个参数是"primary=attribute“形式的字符串。假设=左边的列是这个表中要用来连接的列,而=后面的任何列都被假定为属性代码。然后,它将给定的属性代码转换为适当的table.column,以便在连接中使用,但是如果缺少表,它不会添加表-这就是我们需要第一个addAttributeToFilter的原因。

joinTable的下一个参数也是必需的,它是一个别名为=>列的数组,其中的每个条目都可以通过其别名进行引用-因此我指定了joinTable(‘cl_designer_value’值‘值’),这意味着我可以将cl_designer_value.value (tablealias.column)引用为cl_designer_value。

在joinTable之后,我现在可以将cl_designer_value视为任何其他属性代码,并正常使用它。

请记住,joinTable通过属性代码连接一个表,而且一旦您连接了一个表,您在字段数组(第三个参数)中指定的属性代码就可以在下一次连接中使用。因此,如果需要,您可以将多个调用链接到joinTable,尽管公平地说,我真的不知道什么时候会这样做。

票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14778634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档