/** * Check that entity has overridden url key for specific store * * @param int $storeId * @param int $entityId * @param string $entityType * @throws \InvalidArgumentException * @return bool */ public function doesEntityHaveOverriddenUrlKeyForStore($storeId, $entityId, $entityType) { $attribute = $this->eavConfig->getAttribute($entityType, 'url_key'); if (!$attribute) { throw new \InvalidArgumentException(sprintf('Cannot retrieve attribute for entity type "%s"', $entityType)); } $select = $this->connection->select()->from($attribute->getBackendTable(), 'store_id')->where('attribute_id = ?', $attribute->getId())->where('entity_id = ?', $entityId); return in_array($storeId, $this->connection->fetchCol($select)); }
/** * Check that entity has overridden url attribute for specific store * * @param int $storeId * @param int $entityId * @param string $entityType * @param mixed $attributeName * @throws \InvalidArgumentException * @return bool */ protected function doesEntityHaveOverriddenUrlAttributeForStore($storeId, $entityId, $entityType, $attributeName) { $attribute = $this->eavConfig->getAttribute($entityType, $attributeName); if (!$attribute) { throw new \InvalidArgumentException(sprintf('Cannot retrieve attribute for entity type "%s"', $entityType)); } $linkFieldName = $attribute->getEntity()->getLinkField(); if (!$linkFieldName) { $linkFieldName = $this->getMetadataPool()->getMetadata(ProductInterface::class)->getLinkField(); } $select = $this->connection->select()->from(['e' => $attribute->getEntity()->getEntityTable()], [])->join(['e_attr' => $attribute->getBackendTable()], "e.{$linkFieldName} = e_attr.{$linkFieldName}", 'store_id')->where('e_attr.attribute_id = ?', $attribute->getId())->where('e.entity_id = ?', $entityId); return in_array($storeId, $this->connection->fetchCol($select)); }
/** * Retrieve entity ids by range [$fromVersionId..$toVersionId] * * @param int $fromVersionId * @param int $toVersionId * @return int[] * @throws \Exception */ public function getList($fromVersionId, $toVersionId) { $changelogTableName = $this->resource->getTableName($this->getName()); if (!$this->connection->isTableExists($changelogTableName)) { throw new \Exception("Table {$changelogTableName} does not exist"); } $select = $this->connection->select()->distinct(true)->from($changelogTableName, [$this->getColumnName()])->where('version_id > ?', (int) $fromVersionId)->where('version_id <= ?', (int) $toVersionId); return $this->connection->fetchCol($select); }
/** * @inheritdoc */ public function loadDeletedRecords($deltaLogName, $idKey, $pageNumber, $pageSize, $getProcessed = false) { $select = $this->resourceAdapter->select(); $select->from($deltaLogName, [$idKey])->where("`operation` = 'DELETE'")->limit($pageSize, $pageNumber * $pageSize); if (!$getProcessed) { $select->where("`processed` != 1"); } $result = $this->resourceAdapter->fetchCol($select); return $result; }
/** * @param mixed $parentId * @param int $parentLevel * @return $this */ protected function _updateChildLevels($parentId, $parentLevel) { $select = $this->_conn->select()->from($this->_table, $this->_idField)->where($this->_parentField . '=?', $parentId); $ids = $this->_conn->fetchCol($select); if (!empty($ids)) { $this->_conn->update($this->_table, [$this->_levelField => $parentLevel + 1], $this->_conn->quoteInto($this->_idField . ' IN (?)', $ids)); foreach ($ids as $id) { $this->_updateChildLevels($id, $parentLevel + 1); } } return $this; }
/** * Return all product children ids * * @param int $productId Product Entity Id * @param string $typeId Super Product Link Type * @return array|null */ public function getProductChildIds($productId, $typeId) { $typeInstance = $this->getProductTypeInstance($typeId); $relation = $typeInstance->isComposite($this->getProductEmulator($typeId)) ? $typeInstance->getRelationInfo() : false; if ($relation && $relation->getTable() && $relation->getParentFieldName() && $relation->getChildFieldName()) { $select = $this->connection->select()->from(['main' => $this->getTable($relation->getTable())], [$relation->getChildFieldName()])->where($relation->getParentFieldName() . ' = ?', $productId); if ($relation->getWhere() !== null) { $select->where($relation->getWhere()); } return $this->connection->fetchCol($select); } return null; }
/** * Return all product children ids * * @param int $productId Product Entity Id * @param string $typeId Super Product Link Type * @return array|null */ public function getProductChildIds($productId, $typeId) { $typeInstance = $this->getProductTypeInstance($typeId); $relation = $typeInstance->isComposite($this->getProductEmulator($typeId)) ? $typeInstance->getRelationInfo() : false; if ($relation && $relation->getTable() && $relation->getParentFieldName() && $relation->getChildFieldName()) { $select = $this->connection->select()->from(['main' => $this->getTable($relation->getTable())], [$relation->getChildFieldName()]); $select->join(['e' => $this->resource->getTableName('catalog_product_entity')], 'e.' . $this->metadata->getLinkField() . ' = main.' . $relation->getParentFieldName())->where('e.entity_id = ?', $productId); if ($relation->getWhere() !== null) { $select->where($relation->getWhere()); } return $this->connection->fetchCol($select); } return null; }
/** * Copy relations product index from primary index to temporary index table by parent entity * * @param null|array $parentIds * @param array $excludeIds * @return \Magento\Catalog\Model\Indexer\Product\Price\AbstractAction */ protected function _copyRelationIndexData($parentIds, $excludeIds = null) { $select = $this->_connection->select()->from($this->_defaultIndexerResource->getTable('catalog_product_relation'), ['child_id'])->where('parent_id IN(?)', $parentIds); if (!empty($excludeIds)) { $select->where('child_id NOT IN(?)', $excludeIds); } $children = $this->_connection->fetchCol($select); if ($children) { $select = $this->_connection->select()->from($this->_defaultIndexerResource->getTable('catalog_product_index_price'))->where('entity_id IN(?)', $children); $query = $select->insertFromSelect($this->_defaultIndexerResource->getIdxTable(), [], false); $this->_connection->query($query); } return $this; }
/** * If product saved on default store view, then need to check specific url_key for other stores * * @param int $storeId * @param int $productId * @return bool */ public function isNeedCreateUrlRewrite($storeId, $productId) { $attribute = $this->eavConfig->getAttribute(Product::ENTITY, 'url_key'); $select = $this->connection->select()->from($attribute->getBackendTable(), 'store_id')->where('attribute_id = ?', $attribute->getId())->where('entity_id = ?', $productId); return !in_array($storeId, $this->connection->fetchCol($select)); }
/** * @param AdapterInterface $connection * @param string $attributeTableName * @return array * @throws \Zend_Db_Statement_Exception */ private function getAffectedAttributeIds(AdapterInterface $connection, $attributeTableName) { $linkField = $this->metadata->getLinkField(); $select = $connection->select()->reset(); $select->from(['e' => $this->attributeResource->getTable('catalog_product_entity')], 'ei.value_id'); $select->join(['ei' => $attributeTableName], 'ei.' . $linkField . ' = e.' . $linkField . ' AND ei.store_id != 0', ''); $select->join(['s' => $this->attributeResource->getTable('store')], 's.store_id = ei.store_id', ''); $select->join(['sg' => $this->attributeResource->getTable('store_group')], 'sg.group_id = s.group_id', ''); $select->joinLeft(['pw' => $this->attributeResource->getTable('catalog_product_website')], 'pw.website_id = sg.website_id AND pw.product_id = e.entity_id', ''); $select->where('pw.product_id is null'); return $connection->fetchCol($select); }
protected function getIsAttributeValueUsed($attribute_code, $value, $storeId, $isSelect = false) { $attributeModel = $this->shipperDataHelper->getAttribute($attribute_code, $storeId); $select = $this->connection->select()->distinct(true)->from($attributeModel->getBackend()->getTable(), ['value'])->where('attribute_id=?', $attributeModel->getId())->where('value!=?', ''); $usedAttributeValues = $this->connection->fetchCol($select); if ($isSelect) { //account for multiselect values $separated = array(); foreach ($usedAttributeValues as $key => $aValue) { if (strstr($aValue, ',')) { $values = explode(',', $aValue); $separated = array_merge($separated, $values); unset($usedAttributeValues[$key]); } } $usedAttributeValues = array_merge($usedAttributeValues, $separated); } return in_array($value, $usedAttributeValues); }