/**
  * Resets select object
  *
  * @param null $part
  * @return $this
  */
 public function reset($part = null)
 {
     if ($part === self::COLUMNS || $part === null) {
         $this->outfile = false;
     }
     return parent::reset($part);
 }
예제 #2
0
 /**
  * Retrieve product count select for categories
  *
  * @return \Magento\Framework\DB\Select
  */
 public function getProductCountSelect()
 {
     if ($this->_productCountSelect === null) {
         $this->_productCountSelect = clone $this->getSelect();
         $this->_productCountSelect->reset(\Magento\Framework\DB\Select::COLUMNS)->reset(\Magento\Framework\DB\Select::GROUP)->reset(\Magento\Framework\DB\Select::ORDER)->distinct(false)->join(['count_table' => $this->getTable('catalog_category_product_index')], 'count_table.product_id = e.entity_id', ['count_table.category_id', 'product_count' => new \Zend_Db_Expr('COUNT(DISTINCT count_table.product_id)')])->where('count_table.store_id = ?', $this->getStoreId())->group('count_table.category_id');
     }
     return $this->_productCountSelect;
 }
예제 #3
0
 /**
  * Add EXISTS clause
  *
  * @param  Select $select
  * @param  string           $joinCondition
  * @param   bool            $isExists
  * @return $this
  */
 public function exists($select, $joinCondition, $isExists = true)
 {
     if ($isExists) {
         $exists = 'EXISTS (%s)';
     } else {
         $exists = 'NOT EXISTS (%s)';
     }
     $select->reset(self::COLUMNS)->columns([new \Zend_Db_Expr('1')])->where($joinCondition);
     $exists = sprintf($exists, $select->assemble());
     $this->where($exists);
     return $this;
 }
예제 #4
0
 /**
  * Prepare and returns having array
  *
  * @param \Magento\Framework\DB\Select $select
  * @param bool $autoReset
  * @return array
  * @throws \Zend_Db_Exception
  */
 protected function _prepareHaving(\Magento\Framework\DB\Select $select, $autoReset = false)
 {
     $selectHavings = $select->getPart(\Zend_Db_Select::HAVING);
     if (!$selectHavings) {
         return [];
     }
     $havings = [];
     $columns = $select->getPart(\Zend_Db_Select::COLUMNS);
     foreach ($columns as $columnEntry) {
         $correlationName = (string) $columnEntry[1];
         $column = $columnEntry[2];
         foreach ($selectHavings as $having) {
             /**
              * Looking for column expression in the having clause
              */
             if (strpos($having, $correlationName) !== false) {
                 if (is_string($column)) {
                     /**
                      * Replace column expression to column alias in having clause
                      */
                     $havings[] = str_replace($correlationName, $column, $having);
                 } else {
                     throw new \Zend_Db_Exception(sprintf("Can't prepare expression without column alias: '%s'", $correlationName));
                 }
             }
         }
     }
     if ($autoReset) {
         $select->reset(\Zend_Db_Select::HAVING);
     }
     return $havings;
 }