示例#1
0
 /**
  * Get the select object for get stock status by configurable product ids
  *
  * @param int|array $entityIds
  * @param bool $usePrimaryTable use primary or temporary index table
  * @return \Magento\Framework\DB\Select
  */
 protected function _getStockStatusSelect($entityIds = null, $usePrimaryTable = false)
 {
     $metadata = $this->getMetadataPool()->getMetadata(\Magento\Catalog\Api\Data\ProductInterface::class);
     $connection = $this->getConnection();
     $idxTable = $usePrimaryTable ? $this->getMainTable() : $this->getIdxTable();
     $select = parent::_getStockStatusSelect($entityIds, $usePrimaryTable);
     $select->reset(\Magento\Framework\DB\Select::COLUMNS)->columns(['e.entity_id', 'cis.website_id', 'cis.stock_id'])->joinLeft(['l' => $this->getTable('catalog_product_super_link')], 'l.parent_id = e.' . $metadata->getLinkField(), [])->join(['le' => $this->getTable('catalog_product_entity')], 'le.entity_id = l.product_id', [])->joinLeft(['i' => $idxTable], 'i.product_id = l.product_id AND cis.website_id = i.website_id AND cis.stock_id = i.stock_id', [])->columns(['qty' => new \Zend_Db_Expr('0')]);
     $statusExpr = $this->getStatusExpression($connection);
     $optExpr = $connection->getCheckSql("le.required_options = 0", 'i.stock_status', 0);
     $stockStatusExpr = $connection->getLeastSql(["MAX({$optExpr})", "MIN({$statusExpr})"]);
     $select->columns(['status' => $stockStatusExpr]);
     if ($entityIds !== null) {
         $select->where('e.entity_id IN(?)', $entityIds);
     }
     return $select;
 }
示例#2
0
 /**
  * Update Stock status index by product ids
  *
  * @param array|int $entityIds
  * @return $this
  */
 protected function _updateIndex($entityIds)
 {
     parent::_updateIndex($entityIds);
     $this->_cleanBundleOptionStockData();
     return $this;
 }