Пример #1
0
 /**
  * Add attribute to filter
  *
  * @param \Magento\Eav\Model\Entity\Attribute\AbstractAttribute|string $attribute
  * @param array $condition
  * @param string $joinType
  * @return $this
  */
 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 = 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') {
         $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);
     }
 }