我正在尝试将产品价格与 Magento 系列中的销售价格进行比较。具体来说,试图找到销售价格大于或等于其基本价格的所有产品。
从逻辑上讲,我试图将字段名称放入addAttributeToFilter
调用中:
->addAttributeToFilter('special_price', array('gteq' => 'special_price'));
但这没有用。有没有一种好方法可以做到这一点,不需要我让每件产品都有销售价格来手动检查销售价格是否大于或等于其基本价格?
解决方案
这很奇怪,并且显示了 Magento 集合有时是多么奇怪。事实证明,仅仅因为你->addAttributeToSelect('price')
加入了你的调用链,并不意味着你能以一种很好的方式获得价格。所以我必须做的是放入一个条件,以便我可以在查询的其他部分访问它。我选择了->addAttributeToFilter('price', array('gteq' => 0))
。我必须以特价做同样的事情。
然后当涉及到 where 条件时,我仍然无法使用简单的名称访问价格和特价,所以我不得不使用它们的表值,所以我的 where 语句最终是$products->getSelect()->where('_table_special_price.value >= _table_price.value');
最后,这就是我的整个链条的样子(那里有一些自定义属性):
$products = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('id')
->addAttributeToSelect('name')
->addAttributeToSelect('price')
->addAttributeToSelect('special_price')
->addAttributeToFilter('price', array('gteq' => 0))
->addAttributeToFilter('special_price', array('gteq' => 0))
->addAttributeToFilter('visibility', 4)
->addAttributeToFilter('discontinued', array('neq' => 1))
->addAttributeToFilter('status', 1)
;
$products->getSelect()->where(' _table_special_price
. value
>= _table_price
. value
');