【问题标题】:Magento: addAttributeToFilter but ignore for products that don't have this attribute?Magento:addAttributeToFilter 但忽略没有此属性的产品?
【发布时间】:2011-03-25 03:34:03
【问题描述】:

我正在尝试在我的商店中添加一些过滤器,但它们有一个令人讨厌的副作用。

假设我有产品类型 A 和 B。现在我只想显示颜色 = 蓝色/红色的 A。

$collection = Mage::getResourceModel('catalog/product_collection')
    ->setStoreId($this->getStoreId())
    ->addCategoryFilter($this)
    ->addAttributeToFilter(array(
          array('attribute' => 'color', 'in' => array(4, 6)),
    )
    );

这可以解决问题,但现在因为产品类型 B 没有分配给颜色的值(因为没有指定此属性),所以没有显示该类型的产品。

我在论坛http://www.magentocommerce.com/boards/viewthread/178309找到了这段代码,但它不起作用:

array('attribute' => 'color', 'is' => new Zend_Db_Expr('null'))

也没有:

array('attribute' => 'color', 'null' => true),

这实际上显示了分配了属性但没有声明值的产品...

我也尝试添加:

array('attribute' => 'price', 'gteq' => 0), 

因为我认为这些语句与“或”相关联(根据文档),但即使这样也只会添加分配了属性的产品类型...

请注意,这些值来自下拉列表,但不确定是否重要。

【问题讨论】:

  • 你在哪里打电话? (方法调用中的“$this”是什么->addCategoryFilter($this))
  • 我在 app/code/core/mage/catalog/model/category.php 的 getProductCollection() 中调用它

标签: attributes magento filter exists not-exists


【解决方案1】:

也许为时已晚,但这对我有用:

$collection = Mage::getResourceModel('catalog/product_collection')
    ->setStoreId($this->getStoreId())
    ->addCategoryFilter($this)
    ->addAttributeToFilter(
        array(
            array('attribute' => 'color', 'null' => true),
            array('attribute' => 'color', 'in' => array(4, 6)),
        ),
        '',
        'left'
);

【讨论】:

  • 晚了一年多,但它确实符合我的需要,希望其他人仍然可以使用它。
  • 这段代码触发了左连接而不是内连接,这就是它解决问题的原因。
【解决方案2】:

副手,试一试:

$collection = Mage::getResourceModel('catalog/product_collection')
    ->setStoreId($this->getStoreId())
    ->addCategoryFilter($this)
    ->addAttributeToFilter(array(array('attribute' => 'color', 'in' => array(4, 6)),'left')
);

【讨论】:

  • 顺便说一句,我必须添加一个 ),根据我添加它的位置,我得到了那个错误或者根本不是想要的结果
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-18
相关资源
最近更新 更多