/** * Add attribute to filter * * @param Mage_Eav_Model_Entity_Attribute_Abstract|string $attribute * @param array $condition * @param string $joinType * @return Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection */ public function addAttributeToFilter($attribute, $condition = null, $joinType = 'inner') { if ($this->isEnabledFlat()) { if ($attribute instanceof Mage_Eav_Model_Entity_Attribute_Abstract) { $attribute = $attribute->getAttributeCode(); } if (is_array($attribute)) { $sqlArr = array(); foreach ($attribute as $condition) { $sqlArr[] = $this->_getAttributeConditionSql($condition['attribute'], $condition, $joinType); } $conditionSql = '(' . join(') OR (', $sqlArr) . ')'; $this->getSelect()->where($conditionSql); return $this; } if (!isset($this->_selectAttributes[$attribute])) { $this->addAttributeToSelect($attribute); } if (isset($this->_selectAttributes[$attribute])) { $this->getSelect()->where($this->_getConditionSql('e.' . $attribute, $condition)); } return $this; } $this->_allIdsCache = null; if (is_string($attribute) && $attribute == 'is_saleable') { $isStockManagedInConfig = (int) Mage::getStoreConfig(Mage_CatalogInventory_Model_Stock_Item::XML_PATH_MANAGE_STOCK); $inventoryTable = $this->getTable('cataloginventory_stock_item'); $this->getSelect()->where($this->_getConditionSql("(\n IF(\n IF(\n {$inventoryTable}.use_config_manage_stock, \n {$isStockManagedInConfig}, \n {$inventoryTable}.manage_stock\n ), \n {$inventoryTable}.is_in_stock, \n 1\n )\n )", $condition)); return $this; } else { return parent::addAttributeToFilter($attribute, $condition, $joinType); } }
/** * Add attribute to filter * * @param Mage_Eav_Model_Entity_Attribute_Abstract|string $attribute * @param array $condition * @param string $joinType * @return Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection */ public function addAttributeToFilter($attribute, $condition = null, $joinType = 'inner') { if ($this->isEnabledFlat()) { if ($attribute instanceof Mage_Eav_Model_Entity_Attribute_Abstract) { $attribute = $attribute->getAttributeCode(); } if (!isset($this->_selectAttributes[$attribute])) { $this->addAttributeToSelect($attribute); } if (isset($this->_selectAttributes[$attribute])) { $this->getSelect()->where($this->_getConditionSql('e.' . $attribute, $condition)); } return $this; } $this->_allIdsCache = null; if (is_string($attribute) && $attribute == 'is_saleable') { return $this->getSelect()->where($this->_getConditionSql('(IF(manage_stock, is_in_stock, 1))', $condition)); } else { return parent::addAttributeToFilter($attribute, $condition, $joinType); } }
/** * Add attribute to filter * * @param Mage_Eav_Model_Entity_Attribute_Abstract|string $attribute * @param array $condition * @param string $joinType * @return Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection */ public function addAttributeToFilter($attribute, $condition = null, $joinType = 'inner') { if ($this->isEnabledFlat()) { if ($attribute instanceof Mage_Eav_Model_Entity_Attribute_Abstract) { $attribute = $attribute->getAttributeCode(); } if (is_array($attribute)) { $sqlArr = array(); foreach ($attribute as $condition) { $sqlArr[] = $this->_getAttributeConditionSql($condition['attribute'], $condition, $joinType); } $conditionSql = '(' . join(') OR (', $sqlArr) . ')'; $this->getSelect()->where($conditionSql, null, Varien_Db_Select::TYPE_CONDITION); return $this; } if (!isset($this->_selectAttributes[$attribute])) { $this->addAttributeToSelect($attribute); } if (isset($this->_selectAttributes[$attribute])) { $this->getSelect()->where($this->_getConditionSql('e.' . $attribute, $condition)); } return $this; } $this->_allIdsCache = null; if (is_string($attribute) && $attribute == 'is_saleable') { $columns = $this->getSelect()->getPart(Zend_Db_Select::COLUMNS); foreach ($columns as $columnEntry) { list($correlationName, $column, $alias) = $columnEntry; if ($alias == 'is_saleable') { if ($column instanceof Zend_Db_Expr) { $field = $column; } else { $adapter = $this->getSelect()->getAdapter(); if (empty($correlationName)) { $field = $adapter->quoteColumnAs($column, $alias, true); } else { $field = $adapter->quoteColumnAs(array($correlationName, $column), $alias, true); } } $this->getSelect()->where("{$field} = ?", $condition); break; } } return $this; } else { return parent::addAttributeToFilter($attribute, $condition, $joinType); } }
public function addAttributeToFilter($attribute, $condition = null, $joinType = 'inner') { $this->_allIdsCache = null; if (is_string($attribute) && $attribute == 'is_saleable') { return $this->getSelect()->where($this->_getConditionSql('(IF(manage_stock, is_in_stock, 1))', $condition)); } else { return parent::addAttributeToFilter($attribute, $condition, $joinType); } }