コード例 #1
0
ファイル: Collection.php プロジェクト: Doability/magento2dev
 /**
  * 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);
     }
 }