/** * Add attribute to filter * * @param \Magento\Eav\Model\Entity\Attribute\AbstractAttribute|string $attribute * @param array $condition * @param string $joinType * @return $this * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ public function addAttributeToFilter($attribute, $condition = null, $joinType = 'inner') { if ($this->isEnabledFlat()) { if ($attribute instanceof \Magento\Eav\Model\Entity\Attribute\AbstractAttribute) { $attribute = $attribute->getAttributeCode(); } if (is_array($attribute)) { $sqlArr = []; 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') { $columns = $this->getSelect()->getPart(\Magento\Framework\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 { $connection = $this->getSelect()->getConnection(); if (empty($correlationName)) { $field = $connection->quoteColumnAs($column, $alias, true); } else { $field = $connection->quoteColumnAs([$correlationName, $column], $alias, true); } } $this->getSelect()->where("{$field} = ?", $condition); break; } } return $this; } else { return parent::addAttributeToFilter($attribute, $condition, $joinType); } }